@@ -280,6 +280,7 @@ async def edit_original_message(
280
280
files : List [File ] = MISSING ,
281
281
view : Optional [View ] = MISSING ,
282
282
allowed_mentions : Optional [AllowedMentions ] = None ,
283
+ delete_after : Optional [float ] = None ,
283
284
) -> InteractionMessage :
284
285
"""|coro|
285
286
@@ -311,6 +312,10 @@ async def edit_original_message(
311
312
view: Optional[:class:`~discord.ui.View`]
312
313
The updated view to update this message with. If ``None`` is passed then
313
314
the view is removed.
315
+ delete_after: Optional[:class:`float`]
316
+ If provided, the number of seconds to wait in the background
317
+ before deleting the message we just edited. If the deletion fails,
318
+ then it is silently ignored.
314
319
315
320
Raises
316
321
-------
@@ -354,16 +359,26 @@ async def edit_original_message(
354
359
message = InteractionMessage (state = self ._state , channel = self .channel , data = data ) # type: ignore
355
360
if view and not view .is_finished ():
356
361
self ._state .store_view (view , message .id )
362
+
363
+ if delete_after is not None :
364
+ await self .delete_original_message (delay = delete_after )
365
+
357
366
return message
358
367
359
- async def delete_original_message (self ) -> None :
368
+ async def delete_original_message (self , * , delay : Optional [ float ] = None ) -> None :
360
369
"""|coro|
361
370
362
371
Deletes the original interaction response message.
363
372
364
373
This is a lower level interface to :meth:`InteractionMessage.delete` in case
365
374
you do not want to fetch the message and save an HTTP request.
366
375
376
+ Parameters
377
+ -----------
378
+ delay: Optional[:class:`float`]
379
+ If provided, the number of seconds to wait before deleting the message.
380
+ The waiting is done in the background and deletion failures are ignored.
381
+
367
382
Raises
368
383
-------
369
384
HTTPException
@@ -372,12 +387,17 @@ async def delete_original_message(self) -> None:
372
387
Deleted a message that is not yours.
373
388
"""
374
389
adapter = async_context .get ()
375
- await adapter .delete_original_interaction_response (
390
+ func = adapter .delete_original_interaction_response (
376
391
self .application_id ,
377
392
self .token ,
378
393
session = self ._session ,
379
394
)
380
395
396
+ if delay is not None :
397
+ utils .delay_task (delay , func )
398
+ else :
399
+ await func
400
+
381
401
382
402
class InteractionResponse :
383
403
"""Represents a Discord interaction response.
@@ -608,10 +628,7 @@ async def send_message(
608
628
609
629
self ._responded = True
610
630
if delete_after is not None :
611
- async def delete ():
612
- await asyncio .sleep (delete_after )
613
- await self ._parent .delete_original_message ()
614
- asyncio .ensure_future (delete (), loop = self ._parent ._state .loop )
631
+ await self ._parent .delete_original_message (delay = delete_after )
615
632
return self ._parent
616
633
617
634
async def edit_message (
@@ -622,6 +639,7 @@ async def edit_message(
622
639
embeds : List [Embed ] = MISSING ,
623
640
attachments : List [Attachment ] = MISSING ,
624
641
view : Optional [View ] = MISSING ,
642
+ delete_after : Optional [float ] = None
625
643
) -> None :
626
644
"""|coro|
627
645
@@ -643,6 +661,10 @@ async def edit_message(
643
661
view: Optional[:class:`~discord.ui.View`]
644
662
The updated view to update this message with. If ``None`` is passed then
645
663
the view is removed.
664
+ delete_after: Optional[:class:`float`]
665
+ If provided, the number of seconds to wait in the background
666
+ before deleting the message we just edited. If the deletion fails,
667
+ then it is silently ignored.
646
668
647
669
Raises
648
670
-------
@@ -705,6 +727,8 @@ async def edit_message(
705
727
state .store_view (view , message_id )
706
728
707
729
self ._responded = True
730
+ if delete_after is not None :
731
+ await self ._parent .delete_original_message (delay = delete_after )
708
732
709
733
async def send_autocomplete_result (
710
734
self ,
@@ -797,6 +821,7 @@ async def edit(
797
821
files : List [File ] = MISSING ,
798
822
view : Optional [View ] = MISSING ,
799
823
allowed_mentions : Optional [AllowedMentions ] = None ,
824
+ delete_after : Optional [float ] = None ,
800
825
) -> InteractionMessage :
801
826
"""|coro|
802
827
@@ -822,6 +847,10 @@ async def edit(
822
847
view: Optional[:class:`~discord.ui.View`]
823
848
The updated view to update this message with. If ``None`` is passed then
824
849
the view is removed.
850
+ delete_after: Optional[:class:`float`]
851
+ If provided, the number of seconds to wait in the background
852
+ before deleting the message we just edited. If the deletion fails,
853
+ then it is silently ignored.
825
854
826
855
Raises
827
856
-------
@@ -847,6 +876,7 @@ async def edit(
847
876
files = files ,
848
877
view = view ,
849
878
allowed_mentions = allowed_mentions ,
879
+ delete_after = delete_after
850
880
)
851
881
852
882
async def delete (self , * , delay : Optional [float ] = None ) -> None :
@@ -869,16 +899,4 @@ async def delete(self, *, delay: Optional[float] = None) -> None:
869
899
HTTPException
870
900
Deleting the message failed.
871
901
"""
872
-
873
- if delay is not None :
874
-
875
- async def inner_call (delay : float = delay ):
876
- await asyncio .sleep (delay )
877
- try :
878
- await self ._state ._interaction .delete_original_message ()
879
- except HTTPException :
880
- pass
881
-
882
- asyncio .create_task (inner_call ())
883
- else :
884
- await self ._state ._interaction .delete_original_message ()
902
+ await self ._state ._interaction .delete_original_message (delay = delay )
0 commit comments