diff --git a/discord/interactions.py b/discord/interactions.py index f2b9ac6a9..490ae6c1e 100644 --- a/discord/interactions.py +++ b/discord/interactions.py @@ -508,20 +508,25 @@ class InteractionResponse: """ __slots__: Tuple[str, ...] = ( - '_responded', + '_response_type', '_parent', ) def __init__(self, parent: Interaction): self._parent: Interaction = parent - self._responded: bool = False + self._response_type: Optional[InteractionResponseType] = None def is_done(self) -> bool: """:class:`bool`: Indicates whether an interaction response has been done before. An interaction can only be responded to once. """ - return self._responded + return self._response_type is not None + + @property + def type(self) -> Optional[InteractionResponseType]: + """:class:`InteractionResponseType`: The type of response that was sent, ``None`` if response is not done.""" + return self._response_type async def defer(self, *, ephemeral: bool = False, thinking: bool = False) -> None: """|coro| @@ -556,7 +561,7 @@ class InteractionResponse: InteractionResponded This interaction has already been responded to before. """ - if self._responded: + if self._response_type: raise InteractionResponded(self._parent) defer_type: int = 0 @@ -587,7 +592,7 @@ class InteractionResponse: proxy_auth=http.proxy_auth, params=params, ) - self._responded = True + self._response_type = InteractionResponseType(defer_type) async def pong(self) -> None: """|coro| @@ -603,7 +608,7 @@ class InteractionResponse: InteractionResponded This interaction has already been responded to before. """ - if self._responded: + if self._response_type: raise InteractionResponded(self._parent) parent = self._parent @@ -619,7 +624,7 @@ class InteractionResponse: proxy_auth=http.proxy_auth, params=params, ) - self._responded = True + self._response_type = InteractionResponseType.pong async def send_message( self, @@ -678,7 +683,7 @@ class InteractionResponse: InteractionResponded This interaction has already been responded to before. """ - if self._responded: + if self._response_type: raise InteractionResponded(self._parent) if ephemeral or suppress_embeds: @@ -723,7 +728,7 @@ class InteractionResponse: entity_id = parent.id if parent.type is InteractionType.application_command else None self._parent._state.store_view(view, entity_id) - self._responded = True + self._response_type = InteractionResponseType.channel_message async def edit_message( self, @@ -773,7 +778,7 @@ class InteractionResponse: InteractionResponded This interaction has already been responded to before. """ - if self._responded: + if self._response_type: raise InteractionResponded(self._parent) parent = self._parent @@ -811,7 +816,7 @@ class InteractionResponse: if view and not view.is_finished(): state.store_view(view, message_id) - self._responded = True + self._response_type = InteractionResponseType.message_update async def send_modal(self, modal: Modal, /) -> None: """|coro| @@ -830,7 +835,7 @@ class InteractionResponse: InteractionResponded This interaction has already been responded to before. """ - if self._responded: + if self._response_type: raise InteractionResponded(self._parent) parent = self._parent @@ -849,7 +854,7 @@ class InteractionResponse: ) self._parent._state.store_view(modal) - self._responded = True + self._response_type = InteractionResponseType.modal async def autocomplete(self, choices: Sequence[Choice[ChoiceT]]) -> None: """|coro| @@ -870,7 +875,7 @@ class InteractionResponse: InteractionResponded This interaction has already been responded to before. """ - if self._responded: + if self._response_type: raise InteractionResponded(self._parent) payload: Dict[str, Any] = { @@ -893,7 +898,7 @@ class InteractionResponse: params=params, ) - self._responded = True + self._response_type = InteractionResponseType.autocomplete_result class _InteractionMessageState: