Skip to content
Merged
Changes from 9 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 24 additions & 4 deletions interactions/client/context.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,13 @@ class _Context(ClientSerializerMixin):
locale: Optional[Locale] = field(converter=Locale, default=None)
guild_locale: Optional[Locale] = field(converter=Locale, default=None)

@property
def deferred_ephemeral(self) -> bool:
return bool(
self.message.flags & MessageFlags.EPHEMERAL
and self.message.flags & MessageFlags.LOADING
)

def __attrs_post_init__(self) -> None:
if self.member and self.guild_id:
self.member._extras["guild_id"] = self.guild_id
Expand Down Expand Up @@ -384,6 +391,7 @@ class CommandContext(_Context):
:ivar bool responded: Whether an original response was made or not.
:ivar bool deferred: Whether the response was deferred or not.
:ivar Optional[Locale] locale: The selected language of the user invoking the interaction.
:ivar bool deferred_ephemeral: Whether the response was deferred and ephemeral.
:ivar Optional[Locale] guild_locale: The guild's preferred language, if invoked in a guild.
:ivar str app_permissions: Bitwise set of permissions the bot has within the channel the interaction was sent from.
:ivar Client client:
Expand Down Expand Up @@ -499,13 +507,19 @@ async def defer(self, ephemeral: Optional[bool] = False) -> None:
self.deferred = True
_ephemeral: int = MessageFlags.EPHEMERAL.value if ephemeral else 0
self.callback = InteractionCallbackType.DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE

await self._client.create_interaction_response(
token=self.token,
application_id=int(self.id),
data={"type": self.callback.value, "data": {"flags": _ephemeral}},
)

try:
_msg = await self._client.get_original_interaction_response(
self.token, str(self.application_id)
)
except LibraryException:
pass
else:
self.message = Message(**_msg, _client=self._client)
self.responded = True

async def send(self, content: Optional[str] = MISSING, **kwargs) -> Message:
Expand Down Expand Up @@ -742,7 +756,6 @@ async def defer(

self.deferred = True
_ephemeral: int = MessageFlags.EPHEMERAL.value if bool(ephemeral) else 0

# ephemeral doesn't change callback typings. just data json
if edit_origin:
self.callback = InteractionCallbackType.DEFERRED_UPDATE_MESSAGE
Expand All @@ -754,7 +767,14 @@ async def defer(
application_id=int(self.id),
data={"type": self.callback.value, "data": {"flags": _ephemeral}},
)

try:
_msg = await self._client.get_original_interaction_response(
self.token, str(self.application_id)
)
except LibraryException:
pass
else:
self.message = Message(**_msg, _client=self._client)
self.responded = True

async def disable_all_components(
Expand Down