From 2e5da071807561660e6a548d87bf23daddb6f813 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20N=C3=B8rgaard?= Date: Sat, 19 Feb 2022 01:26:13 +0000 Subject: [PATCH] Fix unknown DMChannel in MessageReference.resolved.channel Threads would cause the message reference to resolve to a DMChannel --- discord/message.py | 4 +++- discord/state.py | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/discord/message.py b/discord/message.py index bd17eb7f4..b8abd3749 100644 --- a/discord/message.py +++ b/discord/message.py @@ -716,8 +716,10 @@ class Message(Hashable): # Right now the channel IDs match but maybe in the future they won't. if ref.channel_id == channel.id: chan = channel + elif isinstance(channel, Thread) and channel.parent.id == ref.channel_id: + chan = channel else: - chan, _ = state._get_guild_channel(resolved) + chan, _ = state._get_guild_channel(resolved, ref.guild_id) # the channel will be the correct type here ref.resolved = self.__class__(channel=chan, data=resolved, state=state) # type: ignore diff --git a/discord/state.py b/discord/state.py index c60d0acca..85f751be3 100644 --- a/discord/state.py +++ b/discord/state.py @@ -446,10 +446,11 @@ class ConnectionState: # If presences are enabled then we get back the old guild.large behaviour return self._chunk_guilds and not guild.chunked and not (self._intents.presences and not guild.large) - def _get_guild_channel(self, data: MessagePayload) -> Tuple[Union[Channel, Thread], Optional[Guild]]: + def _get_guild_channel(self, data: MessagePayload, guild_id: Optional[int] = None) -> Tuple[Union[Channel, Thread], Optional[Guild]]: channel_id = int(data['channel_id']) try: - guild = self._get_guild(int(data['guild_id'])) + guild_id = guild_id or int(data['guild_id']) + guild = self._get_guild(guild_id) except KeyError: channel = DMChannel._from_message(self, channel_id) guild = None