diff options
Diffstat (limited to 'bot/utils/pagination.py')
| -rw-r--r-- | bot/utils/pagination.py | 26 | 
1 files changed, 14 insertions, 12 deletions
| diff --git a/bot/utils/pagination.py b/bot/utils/pagination.py index a4d0cc56..742281d7 100644 --- a/bot/utils/pagination.py +++ b/bot/utils/pagination.py @@ -4,6 +4,7 @@ from typing import Iterable, List, Optional, Tuple  from discord import Embed, Member, Reaction  from discord.abc import User +from discord.embeds import EmptyEmbed  from discord.ext.commands import Context, Paginator  from bot.constants import Emojis @@ -26,7 +27,7 @@ class EmptyPaginatorEmbed(Exception):  class LinePaginator(Paginator):      """A class that aids in paginating code blocks for Discord messages.""" -    def __init__(self, prefix: str = '```', suffix: str = '```', max_size: int = 2000, max_lines: int = None): +    def __init__(self, prefix: str = "```", suffix: str = "```", max_size: int = 2000, max_lines: int = None):          """          Overrides the Paginator.__init__ from inside discord.ext.commands. @@ -44,7 +45,7 @@ class LinePaginator(Paginator):          self._count = len(prefix) + 1  # prefix + newline          self._pages = [] -    def add_line(self, line: str = '', *, empty: bool = False) -> None: +    def add_line(self, line: str = "", *, empty: bool = False) -> None:          """          Adds a line to the current page. @@ -56,7 +57,7 @@ class LinePaginator(Paginator):          If `empty` is True, an empty line will be placed after the a given `line`.          """          if len(line) > self.max_size - len(self.prefix) - 2: -            raise RuntimeError('Line exceeds maximum page size %s' % (self.max_size - len(self.prefix) - 2)) +            raise RuntimeError("Line exceeds maximum page size %s" % (self.max_size - len(self.prefix) - 2))          if self.max_lines is not None:              if self._linecount >= self.max_lines: @@ -71,7 +72,7 @@ class LinePaginator(Paginator):          self._current_page.append(line)          if empty: -            self._current_page.append('') +            self._current_page.append("")              self._count += 1      @classmethod @@ -79,7 +80,7 @@ class LinePaginator(Paginator):                         prefix: str = "", suffix: str = "", max_lines: Optional[int] = None,                         max_size: int = 500, empty: bool = True, restrict_to_user: User = None,                         timeout: int = 300, footer_text: str = None, url: str = None, -                       exception_on_empty_embed: bool = False): +                       exception_on_empty_embed: bool = False) -> None:          """          Use a paginator and set of reactions to provide pagination over a set of lines. @@ -157,7 +158,8 @@ class LinePaginator(Paginator):                  log.trace(f"Setting embed url to '{url}'")              log.debug("There's less than two pages, so we won't paginate - sending single page on its own") -            return await ctx.send(embed=embed) +            await ctx.send(embed=embed) +            return          else:              if footer_text:                  embed.set_footer(text=f"{footer_text} (Page {current_page + 1}/{len(paginator.pages)})") @@ -282,7 +284,7 @@ class ImagePaginator(Paginator):          self.images = []          self._pages = [] -    def add_line(self, line: str = '', *, empty: bool = False) -> None: +    def add_line(self, line: str = "", *, empty: bool = False) -> None:          """          Adds a line to each page, usually just 1 line in this context. @@ -302,7 +304,7 @@ class ImagePaginator(Paginator):      @classmethod      async def paginate(cls, pages: List[Tuple[str, str]], ctx: Context, embed: Embed,                         prefix: str = "", suffix: str = "", timeout: int = 300, -                       exception_on_empty_embed: bool = False): +                       exception_on_empty_embed: bool = False) -> None:          """          Use a paginator and set of reactions to provide pagination over a set of title/image pairs. @@ -352,7 +354,8 @@ class ImagePaginator(Paginator):              embed.set_image(url=image)          if len(paginator.pages) <= 1: -            return await ctx.send(embed=embed) +            await ctx.send(embed=embed) +            return          embed.set_footer(text=f"Page {current_page + 1}/{len(paginator.pages)}")          message = await ctx.send(embed=embed) @@ -417,9 +420,8 @@ class ImagePaginator(Paginator):              await message.edit(embed=embed)              embed.description = paginator.pages[current_page] -            image = paginator.images[current_page] -            if image: -                embed.set_image(url=image) +            image = paginator.images[current_page] or EmptyEmbed +            embed.set_image(url=image)              embed.set_footer(text=f"Page {current_page + 1}/{len(paginator.pages)}")              log.debug(f"Got {reaction_type} page reaction - changing to page {current_page + 1}/{len(paginator.pages)}") | 
