Skip to content

Commit a89fd9a

Browse files
committed
added delay on interaction del msgs
1 parent 1d65214 commit a89fd9a

File tree

2 files changed

+26
-15
lines changed

2 files changed

+26
-15
lines changed

discord/interactions.py

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -348,14 +348,20 @@ async def edit_original_message(
348348
self._state.store_view(view, message.id)
349349
return message
350350

351-
async def delete_original_message(self) -> None:
351+
async def delete_original_message(self, *, delay: Optional[float] = None) -> None:
352352
"""|coro|
353353
354354
Deletes the original interaction response message.
355355
356356
This is a lower level interface to :meth:`InteractionMessage.delete` in case
357357
you do not want to fetch the message and save an HTTP request.
358358
359+
Parameters
360+
-----------
361+
delay: Optional[:class:`float`]
362+
If provided, the number of seconds to wait before deleting the message.
363+
The waiting is done in the background and deletion failures are ignored.
364+
359365
Raises
360366
-------
361367
HTTPException
@@ -364,12 +370,17 @@ async def delete_original_message(self) -> None:
364370
Deleted a message that is not yours.
365371
"""
366372
adapter = async_context.get()
367-
await adapter.delete_original_interaction_response(
373+
func = adapter.delete_original_interaction_response(
368374
self.application_id,
369375
self.token,
370376
session=self._session,
371377
)
372378

379+
if delay is not None:
380+
utils.delay_task(delay, func)
381+
else:
382+
await func
383+
373384

374385
class InteractionResponse:
375386
"""Represents a Discord interaction response.
@@ -861,16 +872,4 @@ async def delete(self, *, delay: Optional[float] = None) -> None:
861872
HTTPException
862873
Deleting the message failed.
863874
"""
864-
865-
if delay is not None:
866-
867-
async def inner_call(delay: float = delay):
868-
await asyncio.sleep(delay)
869-
try:
870-
await self._state._interaction.delete_original_message()
871-
except HTTPException:
872-
pass
873-
874-
asyncio.create_task(inner_call())
875-
else:
876-
await self._state._interaction.delete_original_message()
875+
await self._state._interaction.delete_original_message(delay=delay)

discord/utils.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
Any,
4545
AsyncIterator,
4646
Callable,
47+
Coroutine,
4748
Dict,
4849
ForwardRef,
4950
Generic,
@@ -222,6 +223,17 @@ def count(self, value: Any) -> int:
222223
return self.__proxied.count(value)
223224

224225

226+
def delay_task(delay: float, func: Coroutine):
227+
async def inner_call():
228+
await asyncio.sleep(delay)
229+
try:
230+
await func
231+
except HTTPException:
232+
pass
233+
234+
asyncio.create_task(inner_call())
235+
236+
225237
@overload
226238
def parse_time(timestamp: None) -> None:
227239
...

0 commit comments

Comments
 (0)