diff --git a/discord/message.py b/discord/message.py index 0d506a3ed..e5c127b14 100644 --- a/discord/message.py +++ b/discord/message.py @@ -659,11 +659,15 @@ class PartialMessage(Hashable): The channel associated with this partial message. id: :class:`int` The message ID. + guild_id: Optional[:class:`int`] + The ID of the guild that the partial message belongs to, if applicable. + + .. versionadded:: 2.1 guild: Optional[:class:`Guild`] The guild that the partial message belongs to, if applicable. """ - __slots__ = ('channel', 'id', '_cs_guild', '_state', 'guild') + __slots__ = ('channel', 'id', '_state', 'guild_id', 'guild') def __init__(self, *, channel: MessageableChannel, id: int) -> None: if not isinstance(channel, PartialMessageable) and channel.type not in ( @@ -685,6 +689,12 @@ class PartialMessage(Hashable): self.id: int = id self.guild: Optional[Guild] = getattr(channel, 'guild', None) + self.guild_id: Optional[int] = self.guild.id if self.guild else None + if hasattr(channel, 'guild_id'): + if self.guild_id: + channel.guild_id = self.guild_id # type: ignore + else: + self.guild_id = channel.guild_id # type: ignore def _update(self, data: MessageUpdateEvent) -> None: # This is used for duck typing purposes. @@ -1488,6 +1498,10 @@ class Message(PartialMessage, Hashable): the approximate position of the message in a thread. .. versionadded:: 2.0 + guild_id: Optional[:class:`int`] + The ID of the guild that the partial message belongs to, if applicable. + + .. versionadded:: 2.1 guild: Optional[:class:`Guild`] The guild that the message belongs to, if applicable. interaction: Optional[:class:`Interaction`] @@ -1594,7 +1608,14 @@ class Message(PartialMessage, Hashable): # If the channel doesn't have a guild attribute, we handle that self.guild = channel.guild except AttributeError: - self.guild = state._get_guild(utils._get_as_snowflake(data, 'guild_id')) + guild_id = utils._get_as_snowflake(data, 'guild_id') + if guild_id is not None: + channel.guild_id = guild_id # type: ignore + else: + guild_id = channel.guild_id # type: ignore + + self.guild_id: Optional[int] = guild_id + self.guild = state._get_guild(guild_id) self.application: Optional[IntegrationApplication] = None try: @@ -1819,12 +1840,12 @@ class Message(PartialMessage, Hashable): r.append(Member._try_upgrade(data=mention, guild=guild, state=state)) def _handle_mention_roles(self, role_mentions: List[int]) -> None: - self.role_mentions = [] + self.role_mentions = r = [] if isinstance(self.guild, Guild): for role_id in map(int, role_mentions): role = self.guild.get_role(role_id) if role is not None: - self.role_mentions.append(role) + r.append(role) def _handle_call(self, call: Optional[CallPayload]) -> None: if call is None or self.type is not MessageType.call: