-
-
Notifications
You must be signed in to change notification settings - Fork 482
Closed
Labels
bugSomething isn't workingSomething isn't workingext.pagesRelating to ext.pagesRelating to ext.pages
Description
Summary
If a paginator update fails inside callback, the paginator can enter an un-recoverable state
Reproduction Steps
- Create a paginator with 2 pages
- Click the right arrow/next page button
- The interaction must fail, you can trigger this by adding a debug breakpoint or a sleep function inside
Paginator.goto_page, or by throttling your network connection
- The interaction must fail, you can trigger this by adding a debug breakpoint or a sleep function inside
- Observe the error inside the console:
discord.errors.NotFound: 404 Not Found (error code: 10062): Unknown interaction - Press the same button again
- Observe this error in your console:
page = self.pages[page_number]
~~~~~~~~~~^^^^^^^^^^^^^
IndexError: list index out of range
Minimal Reproducible Code
import os
from discord import Bot
from discord.ext.pages import Paginator
from discord.flags import Intents
bot = Bot(
intents=Intents.default(),
)
@bot.command()
async def test(ctx):
paginator = Paginator(
pages=["page 1", "page 2"],
)
await paginator.respond(ctx.interaction)
bot.run(os.getenv("DISCORD_TOKEN"))Expected Results
The paginator should fallback to its previous state in the event of a failure, so the second update should be a retry of the first.
Actual Results
There is a silent failure, current_page is updated but the paginator is not.
Intents
Intents.default()
System Information
- Python v3.12.0-final
- py-cord v2.5.1-final
- aiohttp v3.9.5
- system info: Darwin 23.4.0 Darwin Kernel Version 23.4.0: Wed Feb 21 21:44:06 PST 2024; root:xnu-10063.101.15~2/RELEASE_ARM64_T8103
Checklist
- I have searched the open issues for duplicates.
- I have shown the entire traceback, if possible.
- I have removed my token from display, if visible.
Additional Context
No response
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workingext.pagesRelating to ext.pagesRelating to ext.pages