From d331b849361a0bcb0944b6eec9ef29bf9ef5abf2 Mon Sep 17 00:00:00 2001 From: AutonomousCat <130127508+AutonomousCat@users.noreply.github.com> Date: Fri, 24 Jan 2025 20:01:33 -0800 Subject: [PATCH 1/2] Fix timeout for ephemeral paginators and hybrid command --- interactions/ext/paginators.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/interactions/ext/paginators.py b/interactions/ext/paginators.py index 9e36cdcbb..8e666fcd6 100644 --- a/interactions/ext/paginators.py +++ b/interactions/ext/paginators.py @@ -1,6 +1,7 @@ import asyncio import textwrap import uuid +from functools import partial from typing import Callable, Coroutine, List, Optional, Sequence, TYPE_CHECKING, Union import attrs @@ -38,6 +39,8 @@ class Timeout: repr=False, ) """The paginator that this timeout is associated with.""" + edit: Callable[..., Coroutine] = attrs.field(repr=False, default=None) + """A coroutine that edits the current paginator message.""" run: bool = attrs.field(repr=False, default=True) """Whether or not this timeout is currently running.""" ping: asyncio.Event = asyncio.Event() @@ -49,7 +52,7 @@ async def __call__(self) -> None: await asyncio.wait_for(self.ping.wait(), timeout=self.paginator.timeout_interval) except asyncio.TimeoutError: if self.paginator.message: - await self.paginator.message.edit(components=self.paginator.create_components(True)) + await self.edit(components=self.paginator.create_components(True)) return else: self.ping.clear() @@ -378,8 +381,13 @@ async def send(self, ctx: BaseContext, **kwargs) -> Message: self._message = await ctx.send(**self.to_dict(), **kwargs) self._author_id = ctx.author.id + if hasattr(ctx, "_prefixed_ctx"): # HybridContext + edit = partial(ctx.edit, message=self._message) + else: + edit = self._message.edit + if self.timeout_interval > 1: - self._timeout_task = Timeout(self) + self._timeout_task = Timeout(self, edit) _ = asyncio.create_task(self._timeout_task()) # noqa: RUF006 return self._message @@ -399,8 +407,13 @@ async def reply(self, ctx: "PrefixedContext", **kwargs) -> Message: self._message = await ctx.reply(**self.to_dict(), **kwargs) self._author_id = ctx.author.id + if hasattr(ctx, "_prefixed_ctx"): # HybridContext + edit = partial(ctx.edit, message=self._message) + else: + edit= self._message.edit + if self.timeout_interval > 1: - self._timeout_task = Timeout(self) + self._timeout_task = Timeout(self, edit) _ = asyncio.create_task(self._timeout_task()) # noqa: RUF006 return self._message From 17d191d2069a98a34dbf1294a429053784e30054 Mon Sep 17 00:00:00 2001 From: AutonomousCat <130127508+AutonomousCat@users.noreply.github.com> Date: Fri, 24 Jan 2025 21:34:52 -0800 Subject: [PATCH 2/2] Added condition for SlashContext --- interactions/ext/paginators.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/interactions/ext/paginators.py b/interactions/ext/paginators.py index 8e666fcd6..81ee554ab 100644 --- a/interactions/ext/paginators.py +++ b/interactions/ext/paginators.py @@ -381,9 +381,11 @@ async def send(self, ctx: BaseContext, **kwargs) -> Message: self._message = await ctx.send(**self.to_dict(), **kwargs) self._author_id = ctx.author.id - if hasattr(ctx, "_prefixed_ctx"): # HybridContext + if hasattr(ctx, "token"): # SlashContext + edit = ctx.edit + elif hasattr(ctx, "_prefixed_ctx"): # HybridContext edit = partial(ctx.edit, message=self._message) - else: + else: # PrefixedContext edit = self._message.edit if self.timeout_interval > 1: @@ -407,10 +409,12 @@ async def reply(self, ctx: "PrefixedContext", **kwargs) -> Message: self._message = await ctx.reply(**self.to_dict(), **kwargs) self._author_id = ctx.author.id - if hasattr(ctx, "_prefixed_ctx"): # HybridContext + if hasattr(ctx, "token"): # SlashContext + edit = ctx.edit + elif hasattr(ctx, "_prefixed_ctx"): # HybridContext edit = partial(ctx.edit, message=self._message) - else: - edit= self._message.edit + else: # PrefixedContext + edit = self._message.edit if self.timeout_interval > 1: self._timeout_task = Timeout(self, edit)