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
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
[X] I have searched the open issues for duplicates.
[X] I have shown the entire traceback, if possible.
[X] I have removed my token from display, if visible.
Summary
If a paginator update fails inside callback, the paginator can enter an un-recoverable state
Reproduction Steps
Paginator.goto_page
, or by throttling your network connectiondiscord.errors.NotFound: 404 Not Found (error code: 10062): Unknown interaction
Minimal Reproducible Code
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
Checklist
Additional Context
No response