aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNadir Chowdhury <[email protected]>2021-07-01 12:49:44 +0100
committerGitHub <[email protected]>2021-07-01 07:49:44 -0400
commit2d597e310bae7081b827eab8e7597045291454b4 (patch)
treea19c350df6e3f09ad87af88c40b541fc6ed1776d
parent[docs] Fix more references (diff)
downloaddiscord.py-2d597e310bae7081b827eab8e7597045291454b4.tar.xz
discord.py-2d597e310bae7081b827eab8e7597045291454b4.zip
Fix Interaction.channel being None in threads
-rw-r--r--discord/guild.py6
-rw-r--r--discord/interactions.py11
-rw-r--r--discord/state.py6
3 files changed, 16 insertions, 7 deletions
diff --git a/discord/guild.py b/discord/guild.py
index 8ec73543..54b86b29 100644
--- a/discord/guild.py
+++ b/discord/guild.py
@@ -586,6 +586,12 @@ class Guild(Hashable):
channels.sort(key=lambda c: (c._sorting_bucket, c.position, c.id))
return as_list
+ def _resolve_channel(self, id: Optional[int], /) -> Optional[Union[GuildChannel, Thread]]:
+ if id is None:
+ return
+
+ return self._channels.get(id) or self._threads.get(id)
+
def get_channel(self, channel_id: int, /) -> Optional[GuildChannel]:
"""Returns a channel with the given ID.
diff --git a/discord/interactions.py b/discord/interactions.py
index 525f6d45..54f3056d 100644
--- a/discord/interactions.py
+++ b/discord/interactions.py
@@ -47,11 +47,14 @@ if TYPE_CHECKING:
Interaction as InteractionPayload,
)
from .guild import Guild
- from .abc import GuildChannel
from .state import ConnectionState
from aiohttp import ClientSession
from .embeds import Embed
from .ui.view import View
+ from .channel import VoiceChannel, StageChannel, TextChannel, CategoryChannel, StoreChannel
+ from .threads import Thread
+
+ InteractionChannel = Union[VoiceChannel, StageChannel, TextChannel, CategoryChannel, StoreChannel, Thread]
MISSING: Any = utils.MISSING
@@ -145,14 +148,14 @@ class Interaction:
return self._state and self._state._get_guild(self.guild_id)
@property
- def channel(self) -> Optional[GuildChannel]:
- """Optional[:class:`abc.GuildChannel`]: The channel the interaction was sent from.
+ def channel(self) -> Optional[InteractionChannel]:
+ """Optional[Union[:class:`abc.GuildChannel`, :class:`Thread`]]: The channel the interaction was sent from.
Note that due to a Discord limitation, DM channels are not resolved since there is
no data to complete them.
"""
guild = self.guild
- return guild and guild.get_channel(self.channel_id)
+ return guild and guild._resolve_channel(self.channel_id)
@utils.cached_slot_property('_cs_response')
def response(self) -> InteractionResponse:
diff --git a/discord/state.py b/discord/state.py
index 3afee473..5daa583e 100644
--- a/discord/state.py
+++ b/discord/state.py
@@ -383,7 +383,7 @@ class ConnectionState:
channel = DMChannel._from_message(self, channel_id)
guild = None
else:
- channel = guild and (guild.get_channel(channel_id) or guild.get_thread(channel_id))
+ channel = guild and guild._resolve_channel(channel_id)
return channel or Object(id=channel_id), guild
@@ -1254,7 +1254,7 @@ class ConnectionState:
return pm
for guild in self.guilds:
- channel = guild.get_channel(id) or guild.get_thread(id)
+ channel = guild._resolve_channel(id)
if channel is not None:
return channel
@@ -1276,7 +1276,7 @@ class AutoShardedConnectionState(ConnectionState):
new_guild = self._get_guild(msg.guild.id)
if new_guild is not None and new_guild is not msg.guild:
channel_id = msg.channel.id
- channel = new_guild.get_channel(channel_id) or new_guild.get_thread(channel_id) or Object(id=channel_id)
+ channel = new_guild._resolve_channel(channel_id) or Object(id=channel_id)
msg._rebind_cached_references(new_guild, channel)
async def chunker(self, guild_id, query='', limit=0, presences=False, *, shard_id=None, nonce=None):