From 8f8fc4e511fff671a4783da9c76f547e38b016a1 Mon Sep 17 00:00:00 2001 From: Developer Anonymous Date: Fri, 4 Oct 2024 21:43:05 +0200 Subject: [PATCH] Added overloads and enhanced InteractionCallback docstring --- discord/interactions.py | 135 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 130 insertions(+), 5 deletions(-) diff --git a/discord/interactions.py b/discord/interactions.py index 47c237b5d..2f541f0ac 100644 --- a/discord/interactions.py +++ b/discord/interactions.py @@ -27,7 +27,7 @@ DEALINGS IN THE SOFTWARE. from __future__ import annotations import logging -from typing import Any, Dict, Optional, Generic, TYPE_CHECKING, Sequence, Tuple, Union, List +from typing import Any, Dict, Literal, Optional, Generic, TYPE_CHECKING, Sequence, Tuple, Union, List, overload import asyncio import datetime @@ -659,6 +659,29 @@ class InteractionCallback(Generic[ClientT]): """Represents a Discord response to an interaction. .. versionadded:: 2.5 + + Attributes + ---------- + id: :class:`int` + The interaction ID this callback responds to. + interaction_type: :class:`InteractionType` + The interaction type. + callback_type: Optional[:class:`InteractionResponseType`] + The interaction response type. + activity_instance_id: Optional[:class:`str`] + The activity instance ID this interaction was invoked from. + activity_instance: Optional[:class:`InteractionCallbackActivity`] + The resolved activity instance this interaction was invoked from. + response_message_id: Optional[:class:`int`] + The message ID of the interaction response. + response_message_loading: :class:`bool` + Whether the response message showed the application was thinking. + response_message_ephemeral: :class:`bool` + Whether the response message was ephemeral. + response_message: :class:`InteractionMessage` + The resolved response message. + response_channel: Union[:class:`abc.GuildChannel`, :class:`abc.PrivateChannel`, :class:`Thread`] + The channel this interaction was invoked from. """ __slots__ = ( @@ -763,13 +786,33 @@ class InteractionResponse(Generic[ClientT]): """:class:`InteractionResponseType`: The type of response that was sent, ``None`` if response is not done.""" return self._response_type + @overload + async def defer( + self, + *, + ephemeral: bool = ..., + thinking: bool = ..., + with_response: Literal[True] = True, + ) -> InteractionCallback[ClientT]: + ... + + @overload + async def defer( + self, + *, + ephemeral: bool = ..., + thinking: bool = ..., + with_response: Literal[False] = ..., + ) -> None: + ... + async def defer( self, *, ephemeral: bool = False, thinking: bool = False, with_response: bool = True, - ) -> Optional[InteractionCallback]: + ) -> Optional[InteractionCallback[ClientT]]: """|coro| Defers the interaction response. @@ -883,6 +926,48 @@ class InteractionResponse(Generic[ClientT]): ) self._response_type = InteractionResponseType.pong + @overload + async def send_message( + self, + content: Optional[Any] = ..., + *, + embed: Embed = ..., + embeds: Sequence[Embed] = ..., + file: File = ..., + files: Sequence[File] = ..., + view: View = ..., + tts: bool = ..., + ephemeral: bool = ..., + allowed_mentions: AllowedMentions = ..., + suppress_embeds: bool = ..., + silent: bool = ..., + delete_after: Optional[float] = ..., + poll: Poll = ..., + with_response: Literal[True] = True, + ) -> InteractionCallback[ClientT]: + ... + + @overload + async def send_message( + self, + content: Optional[Any] = ..., + *, + embed: Embed = ..., + embeds: Sequence[Embed] = ..., + file: File = ..., + files: Sequence[File] = ..., + view: View = ..., + tts: bool = ..., + ephemeral: bool = ..., + allowed_mentions: AllowedMentions = ..., + suppress_embeds: bool = ..., + silent: bool = ..., + delete_after: Optional[float] = ..., + poll: Poll = ..., + with_response: Literal[False] = ..., + ) -> None: + ... + async def send_message( self, content: Optional[Any] = None, @@ -900,7 +985,7 @@ class InteractionResponse(Generic[ClientT]): delete_after: Optional[float] = None, poll: Poll = MISSING, with_response: bool = True, - ) -> Optional[InteractionCallback]: + ) -> Optional[InteractionCallback[ClientT]]: """|coro| Responds to this interaction by sending a message. @@ -1035,6 +1120,38 @@ class InteractionResponse(Generic[ClientT]): data=response, ) + @overload + async def edit_message( + self, + *, + content: Optional[Any] = ..., + embed: Optional[Embed] = ..., + embeds: Sequence[Embed] = ..., + attachments: Sequence[Union[Attachment, File]] = ..., + view: Optional[View] = ..., + allowed_mentions: Optional[AllowedMentions] = ..., + delete_after: Optional[float] = ..., + suppress_embeds: bool = ..., + with_response: Literal[True] = True, + ) -> InteractionCallback[ClientT]: + ... + + @overload + async def edit_message( + self, + *, + content: Optional[Any] = ..., + embed: Optional[Embed] = ..., + embeds: Sequence[Embed] = ..., + attachments: Sequence[Union[Attachment, File]] = ..., + view: Optional[View] = ..., + allowed_mentions: Optional[AllowedMentions] = ..., + delete_after: Optional[float] = ..., + suppress_embeds: bool = ..., + with_response: Literal[False] = ..., + ) -> None: + ... + async def edit_message( self, *, @@ -1047,7 +1164,7 @@ class InteractionResponse(Generic[ClientT]): delete_after: Optional[float] = None, suppress_embeds: bool = MISSING, with_response: bool = True, - ) -> Optional[InteractionCallback]: + ) -> Optional[InteractionCallback[ClientT]]: """|coro| Responds to this interaction by editing the original message of @@ -1182,7 +1299,15 @@ class InteractionResponse(Generic[ClientT]): data=response, ) - async def send_modal(self, modal: Modal, /, *, with_response: bool = True) -> Optional[InteractionCallback]: + @overload + async def send_modal(self, modal: Modal, /, *, with_response: Literal[True] = True) -> InteractionCallback[ClientT]: + ... + + @overload + async def send_modal(self, modal: Modal, /, *, with_response: Literal[False] = ...) -> None: + ... + + async def send_modal(self, modal: Modal, /, *, with_response: bool = True) -> Optional[InteractionCallback[ClientT]]: """|coro| Responds to this interaction by sending a modal.