Skip to content

Commit bc00b54

Browse files
GeomKidFayeDelDamegoEepyElvyra
authored
feat: add defered_ephemeral property (#1181)
* fix the multiple client mode * Update bot.py * Remove some IDE format accident * fix: sys.module deleting modules twice * Update interactions/client/bot.py Co-authored-by: Damego <[email protected]> * feat: add defered_ephemeral property * fix: change to property using flags * docs: Add the docs at right place * feat: Upgrade defer to return the Message * Update interactions/client/context.py * docs: Add Version added * docs: Fix typo * docs: make consistency * fix:typo Co-authored-by: EdVraz <[email protected]> * fix:typo Co-authored-by: EdVraz <[email protected]> Co-authored-by: DeltaX <[email protected]> Co-authored-by: Damego <[email protected]> Co-authored-by: EdVraz <[email protected]>
1 parent 5e41552 commit bc00b54

File tree

1 file changed

+42
-6
lines changed

1 file changed

+42
-6
lines changed

interactions/client/context.py

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,18 @@ class _Context(ClientSerializerMixin):
6363
locale: Optional[Locale] = field(converter=Locale, default=None)
6464
guild_locale: Optional[Locale] = field(converter=Locale, default=None)
6565

66+
@property
67+
def deferred_ephemeral(self) -> bool:
68+
"""
69+
.. versionadded:: 4.4.0
70+
71+
Returns whether the current interaction was deferred ephemerally.
72+
"""
73+
return bool(
74+
self.message.flags & MessageFlags.EPHEMERAL
75+
and self.message.flags & MessageFlags.LOADING
76+
)
77+
6678
def __attrs_post_init__(self) -> None:
6779
if self.member and self.guild_id:
6880
self.member._extras["guild_id"] = self.guild_id
@@ -488,25 +500,37 @@ async def edit(
488500

489501
return msg if msg is not None else Message(**payload, _client=self._client)
490502

491-
async def defer(self, ephemeral: Optional[bool] = False) -> None:
503+
async def defer(self, ephemeral: Optional[bool] = False) -> Message:
492504
"""
505+
.. versionchanged:: 4.4.0
506+
Now returns the created message object
507+
493508
This "defers" an interaction response, allowing up
494509
to a 15-minute delay between invocation and responding.
495510
496511
:param Optional[bool] ephemeral: Whether the deferred state is hidden or not.
512+
:return: The deferred message
513+
:rtype: Message
497514
"""
498515
if not self.responded:
499516
self.deferred = True
500517
_ephemeral: int = MessageFlags.EPHEMERAL.value if ephemeral else 0
501518
self.callback = InteractionCallbackType.DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE
502-
503519
await self._client.create_interaction_response(
504520
token=self.token,
505521
application_id=int(self.id),
506522
data={"type": self.callback.value, "data": {"flags": _ephemeral}},
507523
)
508-
524+
try:
525+
_msg = await self._client.get_original_interaction_response(
526+
self.token, str(self.application_id)
527+
)
528+
except LibraryException:
529+
pass
530+
else:
531+
self.message = Message(**_msg, _client=self._client)
509532
self.responded = True
533+
return self.message
510534

511535
async def send(self, content: Optional[str] = MISSING, **kwargs) -> Message:
512536
payload, files = await super().send(content, **kwargs)
@@ -730,19 +754,23 @@ async def send(self, content: Optional[str] = MISSING, **kwargs) -> Message:
730754

731755
async def defer(
732756
self, ephemeral: Optional[bool] = False, edit_origin: Optional[bool] = False
733-
) -> None:
757+
) -> Message:
734758
"""
759+
.. versionchanged:: 4.4.0
760+
Now returns the created message object
761+
735762
This "defers" a component response, allowing up
736763
to a 15-minute delay between invocation and responding.
737764
738765
:param Optional[bool] ephemeral: Whether the deferred state is hidden or not.
739766
:param Optional[bool] edit_origin: Whether you want to edit the original message or send a followup message
767+
:return: The deferred message
768+
:rtype: Message
740769
"""
741770
if not self.responded:
742771

743772
self.deferred = True
744773
_ephemeral: int = MessageFlags.EPHEMERAL.value if bool(ephemeral) else 0
745-
746774
# ephemeral doesn't change callback typings. just data json
747775
if edit_origin:
748776
self.callback = InteractionCallbackType.DEFERRED_UPDATE_MESSAGE
@@ -754,8 +782,16 @@ async def defer(
754782
application_id=int(self.id),
755783
data={"type": self.callback.value, "data": {"flags": _ephemeral}},
756784
)
757-
785+
try:
786+
_msg = await self._client.get_original_interaction_response(
787+
self.token, str(self.application_id)
788+
)
789+
except LibraryException:
790+
pass
791+
else:
792+
self.message = Message(**_msg, _client=self._client)
758793
self.responded = True
794+
return self.message
759795

760796
async def disable_all_components(
761797
self, respond_to_interaction: Optional[bool] = True, **other_kwargs: Optional[dict]

0 commit comments

Comments
 (0)