From 6b1d46a1eac4a6fcd2607c50fda02ddb10a330a8 Mon Sep 17 00:00:00 2001 From: Lilly Rose Berner Date: Tue, 29 Jun 2021 01:03:59 +0200 Subject: [PATCH] Set Message.guild from guild_id if unavailable through Message.channel --- discord/message.py | 22 ++++++++++------------ discord/state.py | 2 +- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/discord/message.py b/discord/message.py index 3f5df3bd8..7d6cdaa09 100644 --- a/discord/message.py +++ b/discord/message.py @@ -590,6 +590,8 @@ class Message(Hashable): A list of components in the message. .. versionadded:: 2.0 + guild: Optional[:class:`Guild`] + The guild that the message belongs to, if applicable. """ __slots__ = ( @@ -601,7 +603,6 @@ class Message(Hashable): '_cs_raw_channel_mentions', '_cs_raw_role_mentions', '_cs_system_content', - '_cs_guild', 'tts', 'content', 'channel', @@ -623,6 +624,7 @@ class Message(Hashable): 'activity', 'stickers', 'components', + 'guild', ) if TYPE_CHECKING: @@ -656,6 +658,11 @@ class Message(Hashable): self.stickers = [Sticker(data=d, state=state) for d in data.get('stickers', [])] self.components = [_component_factory(d) for d in data.get('components', [])] + try: + self.guild = channel.guild + except AttributeError: + self.guild = state._get_guild(utils._get_as_snowflake(data, 'guild_id')) + try: ref = data['message_reference'] except KeyError: @@ -851,19 +858,10 @@ class Message(Hashable): def _handle_components(self, components: List[ComponentPayload]): self.components = [_component_factory(d) for d in components] - def _rebind_channel_reference(self, new_channel: Union[TextChannel, Thread, DMChannel, GroupChannel]) -> None: + def _rebind_cached_references(self, new_guild: Guild, new_channel: Union[TextChannel, Thread]) -> None: + self.guild = new_guild self.channel = new_channel - try: - del self._cs_guild # type: ignore - except AttributeError: - pass - - @utils.cached_slot_property('_cs_guild') - def guild(self) -> Optional[Guild]: - """Optional[:class:`Guild`]: The guild that the message belongs to, if applicable.""" - return getattr(self.channel, 'guild', None) - @utils.cached_slot_property('_cs_raw_mentions') def raw_mentions(self) -> List[int]: """List[:class:`int`]: A property that returns an array of user IDs matched with diff --git a/discord/state.py b/discord/state.py index e87d1ab12..3afee4730 100644 --- a/discord/state.py +++ b/discord/state.py @@ -1277,7 +1277,7 @@ class AutoShardedConnectionState(ConnectionState): 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) - msg._rebind_channel_reference(channel) + msg._rebind_cached_references(new_guild, channel) async def chunker(self, guild_id, query='', limit=0, presences=False, *, shard_id=None, nonce=None): ws = self._get_websocket(guild_id, shard_id=shard_id)