Official interactions.py paginator
- Message per embed or persistent message
- Index select that can be turned on/off
- Select labels are generated based on embed's title
- Index button that can be turned on/off
- Ability to set the buttons to any emote, color or label
- Custom buttons
Join our Discord server
- Try out example commands,
- Ask some questions,
- And give us feedback and suggestions!
- Make an issue to:
- say what feature you want to be added
- file a bug report
- Make a pull request and:
- describe what you added/removed
- why you added/removed it
- Make sure you use the issue/PR template!
pip install -U dinteractions-Paginator
- discord-py-interactions (version >=4.2.0)
- interactions-wait-for (version >=1.0.4)
These simple examples show how to easily create interactive, multiple page embeds that anyone can interact with that automatically deactivate after 60 seconds of inactivity:
from interactions import Client, CommandContext, Embed
from interactions.ext.paginator import Page, Paginator
client = Client("token")
@client.command(name="paginator", description="Paginator example")
async def paginator_example(ctx: CommandContext):
await Paginator(
client=client,
ctx=ctx,
pages=[
Page("Content 1", Embed(title="One")),
Page("Content 2", Embed(title="Two")),
Page("Content 3"),
Page(embeds=[Embed(title="Four"), Embed(title="Five")]),
],
).run()
client.start()
This is an individual page to be added to the paginator.
?content: str
: The content of the page.?embeds: Embed | list[Embed]
: The embed(s) to be displayed on the page.?title: str
: The title of the page displayed in the select menu.- Defaults to content or the title of the embed with an available title.
from interactions import Embed
from interactions.ext.paginator import Page, Paginator
pages = [
Page("Content 1", Embed(title="One")),
Page("Content 2", Embed(title="Two")),
Page("Content 3"),
Page(embeds=[Embed(title="Four"), Embed(title="Five")]),
]
...
p = Paginator(..., pages=pages)
await p.run()
client: Client
: The client instancectx: CommandContext | ComponentContext
: The contextpages: list[Page]
: The pages to paginate.- Use a list of
Page
objects.
- Use a list of
?timeout: int
: The amount of time in seconds before the paginator automatically deactivates.- Defaults to 60 seconds.
- When timed out, the paginator will automatically deactivate, and by default, the components will be disabled.
- To modify this behavior, modify
disable_after_timeout
orremove_after_timeout
.
- To modify this behavior, modify
?author_only: bool = False
: Whether the paginator should only be used by the author.?use_buttons: bool = True
: Whether the paginator should use buttons.?use_select: bool = True
: Whether the paginator should use the select menu.?use_index: bool = False
: Whether the paginator should use the index button.?extended_buttons: bool = True
: Whether the paginator should use extended buttons.- They are 2 buttons that skip to the beginning or the end.
?buttons: dict[str, Button]
: Custom buttons to use.- The keys need to be one of the following: first, prev, index, next, last.
- You can use the
ButtonKind
enum for this purpose.
?placeholder: str = "Page"
: The placeholder to use for the select menu.?disable_after_timeout: bool = True
: Whether the components should be disabled after the timeout.?remove_after_timeout: bool = True
: Whether the components should be removed after the timeout.?func_before_edit: Callable | Coroutine
: A function or coroutine that will be called before the embed is edited.- The function will be passed the
Paginator
andComponentContext
objects. - Raise
StopPaginator
to stop the paginator. - Return
False
to skip editing the paginator.
- The function will be passed the
?func_after_edit: Callable | Coroutine
: A function or coroutine that will be called after the embed is edited.- The function will be passed the
Paginator
andComponentContext
objects. - Raise
StopPaginator
to stop the paginator.
- The function will be passed the
All the parameters listed above are stored as attributes in the Paginator
object.
Additional attributes:
-
id: int
: The paginator's ID.- A number between
0
and999,999,999
to ensure that the paginator is unique.
- A number between
-
?component_ctx: ComponentContext
: The context of the paginator's components.- This is only available if or when a component is interacted with.
-
index: int
: The current index of the paginator.- This is the index of the current page.
-
top: int
: The index of the top page. -
?message: Message
: The message that the paginator is using. -
_msg: dict[str, ?Snowflake | int]
: A dict with themessage_id
andchannel_id
of the message. -
_json: dict[str, Any]
: The JSON representation of the paginator.- You can utilize this to create a paginator dynamically by doing this:
p = Paginator(client, ctx, pages, ...) another = Paginator(**p._json)
paginator: Paginator
: ThePaginator
object.original_ctx: CommandContext | ComponentContext
: The original context supplied to the paginator.component_ctx: ComponentContext
: The component context.message: Message
: The message that was sent.
FIRST: "first"
: The first button.PREVIOUS: "prev"
: The previous button.INDEX: "index"
: The index button.NEXT: "next"
: The next button.LAST: "last"
: The last button.
Raise this error in your function or coroutine to stop the paginator.
- Contributors of interactions.py