diff options
Diffstat (limited to '')
| -rw-r--r-- | bot/utils/pagination.py | 37 | 
1 files changed, 25 insertions, 12 deletions
| diff --git a/bot/utils/pagination.py b/bot/utils/pagination.py index 917275c0..d9c0862a 100644 --- a/bot/utils/pagination.py +++ b/bot/utils/pagination.py @@ -27,7 +27,14 @@ 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: Optional[int] = None, +            linesep: str = "\n" +    ):          """          Overrides the Paginator.__init__ from inside discord.ext.commands. @@ -36,16 +43,20 @@ class LinePaginator(Paginator):          `max_size` and `max_lines` denote the maximum amount of codepoints and lines          allowed per page.          """ -        self.prefix = prefix -        self.suffix = suffix -        self.max_size = max_size - len(suffix) +        super().__init__( +            prefix, +            suffix, +            max_size - len(suffix), +            linesep +        ) +          self.max_lines = max_lines          self._current_page = [prefix]          self._linecount = 0          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. @@ -57,7 +68,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: @@ -72,7 +83,7 @@ class LinePaginator(Paginator):          self._current_page.append(line)          if empty: -            self._current_page.append('') +            self._current_page.append("")              self._count += 1      @classmethod @@ -80,7 +91,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. @@ -158,7 +169,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)})") @@ -283,7 +295,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. @@ -303,7 +315,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. @@ -353,7 +365,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) | 
