mirror of
https://github.com/MelisaDev/melisa.git
synced 2024-09-22 19:22:01 +03:00
feat(interactions): defer() method
This commit is contained in:
parent
1c6f96e50d
commit
544c3ea2c4
1 changed files with 68 additions and 4 deletions
|
@ -162,6 +162,7 @@ class Interaction(APIModelBase):
|
||||||
app_permissions: str = None
|
app_permissions: str = None
|
||||||
locale: Optional[str] = None
|
locale: Optional[str] = None
|
||||||
guild_locale: Optional[str] = None
|
guild_locale: Optional[str] = None
|
||||||
|
_is_responded: bool = False
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_dict(cls, data: Dict[str, Any]):
|
def from_dict(cls, data: Dict[str, Any]):
|
||||||
|
@ -217,7 +218,12 @@ class Interaction(APIModelBase):
|
||||||
|
|
||||||
return self
|
return self
|
||||||
|
|
||||||
async def respond(self, response: InteractionResponse, *, content_type: str = None):
|
@property
|
||||||
|
def is_responded(self) -> bool:
|
||||||
|
"""Whether an interaction has been responded before."""
|
||||||
|
return self._is_responded
|
||||||
|
|
||||||
|
async def respond(self, response: InteractionResponse):
|
||||||
"""
|
"""
|
||||||
Respond to an interaction.
|
Respond to an interaction.
|
||||||
|
|
||||||
|
@ -229,6 +235,66 @@ class Interaction(APIModelBase):
|
||||||
|
|
||||||
await self._client.rest.interaction_respond(self, response)
|
await self._client.rest.interaction_respond(self, response)
|
||||||
|
|
||||||
|
async def defer(
|
||||||
|
self,
|
||||||
|
*,
|
||||||
|
with_message: Optional[bool] = False,
|
||||||
|
ephemeral: Optional[bool] = False,
|
||||||
|
) -> None:
|
||||||
|
"""|coro|
|
||||||
|
|
||||||
|
Respond to an interaction with a message.
|
||||||
|
|
||||||
|
The content must be a type that can convert to a string through str(content).
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
with_message: Optional[:class:`bool`]
|
||||||
|
Whether the response will be a message with thinking state (bot is thinking…)
|
||||||
|
ephemeral: Optional[:class:`bool`]
|
||||||
|
Whether the message should be an ephemeral message. Defaults to False.
|
||||||
|
|
||||||
|
Raises
|
||||||
|
-------
|
||||||
|
HTTPException
|
||||||
|
The request to perform the action failed with other http exception.
|
||||||
|
ForbiddenError
|
||||||
|
You do not have the proper permissions to send the message.
|
||||||
|
BadRequestError
|
||||||
|
Some of specified parameters is invalid.
|
||||||
|
"""
|
||||||
|
|
||||||
|
defer_callback_type = None
|
||||||
|
data = {}
|
||||||
|
|
||||||
|
if self.type not in (
|
||||||
|
InteractionType.APPLICATION_COMMAND,
|
||||||
|
InteractionType.MODAL_SUBMIT,
|
||||||
|
InteractionType.MESSAGE_COMPONENT,
|
||||||
|
):
|
||||||
|
raise TypeError(
|
||||||
|
"This interaction must be of type 'APPLICATION_COMMAND', 'MESSAGE_COMPONENT' or 'MODAL_SUBMIT' to defer."
|
||||||
|
)
|
||||||
|
|
||||||
|
if with_message:
|
||||||
|
defer_callback_type = (
|
||||||
|
InteractionCallbackType.DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE
|
||||||
|
)
|
||||||
|
|
||||||
|
if ephemeral:
|
||||||
|
data["flags"] = MessageFlags.EPHEMERAL.value
|
||||||
|
else:
|
||||||
|
defer_callback_type = InteractionCallbackType.DEFERRED_UPDATE_MESSAGE
|
||||||
|
|
||||||
|
return await self.respond(
|
||||||
|
InteractionResponse.from_dict(
|
||||||
|
{
|
||||||
|
"type": defer_callback_type,
|
||||||
|
"data": data,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
async def send_message(
|
async def send_message(
|
||||||
self,
|
self,
|
||||||
content: Optional[str] = None,
|
content: Optional[str] = None,
|
||||||
|
@ -293,9 +359,7 @@ class Interaction(APIModelBase):
|
||||||
if allowed_mentions is not None:
|
if allowed_mentions is not None:
|
||||||
payload["allowed_mentions"] = allowed_mentions.to_dict()
|
payload["allowed_mentions"] = allowed_mentions.to_dict()
|
||||||
elif self._client.allowed_mentions is not None:
|
elif self._client.allowed_mentions is not None:
|
||||||
payload[
|
payload["allowed_mentions"] = self._client.allowed_mentions.to_dict()
|
||||||
"allowed_mentions"
|
|
||||||
] = self._client.allowed_mentions.to_dict()
|
|
||||||
|
|
||||||
if ephemeral:
|
if ephemeral:
|
||||||
payload["flags"] = MessageFlags.EPHEMERAL.value
|
payload["flags"] = MessageFlags.EPHEMERAL.value
|
||||||
|
|
Loading…
Reference in a new issue