mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-06-07 12:18:59 +00:00
Interaction.channel can be a PartialMessageable rather than Object
This allows it to work just fine in DMs
This commit is contained in:
parent
1279510194
commit
66871f329e
@ -31,6 +31,7 @@ import asyncio
|
|||||||
from . import utils
|
from . import utils
|
||||||
from .enums import try_enum, InteractionType, InteractionResponseType
|
from .enums import try_enum, InteractionType, InteractionResponseType
|
||||||
from .errors import InteractionResponded, HTTPException, ClientException
|
from .errors import InteractionResponded, HTTPException, ClientException
|
||||||
|
from .channel import PartialMessageable, ChannelType
|
||||||
|
|
||||||
from .user import User
|
from .user import User
|
||||||
from .member import Member
|
from .member import Member
|
||||||
@ -57,10 +58,12 @@ if TYPE_CHECKING:
|
|||||||
from aiohttp import ClientSession
|
from aiohttp import ClientSession
|
||||||
from .embeds import Embed
|
from .embeds import Embed
|
||||||
from .ui.view import View
|
from .ui.view import View
|
||||||
from .channel import VoiceChannel, StageChannel, TextChannel, CategoryChannel, StoreChannel
|
from .channel import VoiceChannel, StageChannel, TextChannel, CategoryChannel, StoreChannel, PartialMessageable
|
||||||
from .threads import Thread
|
from .threads import Thread
|
||||||
|
|
||||||
InteractionChannel = Union[VoiceChannel, StageChannel, TextChannel, CategoryChannel, StoreChannel, Thread]
|
InteractionChannel = Union[
|
||||||
|
VoiceChannel, StageChannel, TextChannel, CategoryChannel, StoreChannel, Thread, PartialMessageable
|
||||||
|
]
|
||||||
|
|
||||||
MISSING: Any = utils.MISSING
|
MISSING: Any = utils.MISSING
|
||||||
|
|
||||||
@ -111,6 +114,7 @@ class Interaction:
|
|||||||
'_original_message',
|
'_original_message',
|
||||||
'_cs_response',
|
'_cs_response',
|
||||||
'_cs_followup',
|
'_cs_followup',
|
||||||
|
'_cs_channel',
|
||||||
)
|
)
|
||||||
|
|
||||||
def __init__(self, *, data: InteractionPayload, state: ConnectionState):
|
def __init__(self, *, data: InteractionPayload, state: ConnectionState):
|
||||||
@ -129,10 +133,9 @@ class Interaction:
|
|||||||
self.guild_id: Optional[int] = utils._get_as_snowflake(data, 'guild_id')
|
self.guild_id: Optional[int] = utils._get_as_snowflake(data, 'guild_id')
|
||||||
self.application_id: int = int(data['application_id'])
|
self.application_id: int = int(data['application_id'])
|
||||||
|
|
||||||
channel = self.channel or Object(id=self.channel_id) # type: ignore
|
|
||||||
self.message: Optional[Message]
|
self.message: Optional[Message]
|
||||||
try:
|
try:
|
||||||
self.message = Message(state=self._state, channel=channel, data=data['message']) # type: ignore
|
self.message = Message(state=self._state, channel=self.channel, data=data['message']) # type: ignore
|
||||||
except KeyError:
|
except KeyError:
|
||||||
self.message = None
|
self.message = None
|
||||||
|
|
||||||
@ -160,15 +163,21 @@ class Interaction:
|
|||||||
"""Optional[:class:`Guild`]: The guild the interaction was sent from."""
|
"""Optional[:class:`Guild`]: The guild the interaction was sent from."""
|
||||||
return self._state and self._state._get_guild(self.guild_id)
|
return self._state and self._state._get_guild(self.guild_id)
|
||||||
|
|
||||||
@property
|
@utils.cached_slot_property('_cs_channel')
|
||||||
def channel(self) -> Optional[InteractionChannel]:
|
def channel(self) -> Optional[InteractionChannel]:
|
||||||
"""Optional[Union[:class:`abc.GuildChannel`, :class:`Thread`]]: The channel the interaction was sent from.
|
"""Optional[Union[:class:`abc.GuildChannel`, :class:`PartialMessageable`, :class:`Thread`]]: The channel the interaction was sent from.
|
||||||
|
|
||||||
Note that due to a Discord limitation, DM channels are not resolved since there is
|
Note that due to a Discord limitation, DM channels are not resolved since there is
|
||||||
no data to complete them.
|
no data to complete them. These are :class:`PartialMessageable` instead.
|
||||||
"""
|
"""
|
||||||
guild = self.guild
|
guild = self.guild
|
||||||
return guild and guild._resolve_channel(self.channel_id)
|
channel = guild and guild._resolve_channel(self.channel_id)
|
||||||
|
if channel is None:
|
||||||
|
if self.channel_id is not None:
|
||||||
|
type = ChannelType.text if self.guild_id is not None else ChannelType.private
|
||||||
|
return PartialMessageable(state=self._state, id=self.channel_id, type=type)
|
||||||
|
return None
|
||||||
|
return channel
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def permissions(self) -> Permissions:
|
def permissions(self) -> Permissions:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user