mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-07-12 04:45:21 +00:00
Add thread getters to Message
This commit is contained in:
parent
2b51e5e736
commit
29344b9cce
@ -804,6 +804,20 @@ class PartialMessage(Hashable):
|
|||||||
guild_id = getattr(self.guild, 'id', '@me')
|
guild_id = getattr(self.guild, 'id', '@me')
|
||||||
return f'https://discord.com/channels/{guild_id}/{self.channel.id}/{self.id}'
|
return f'https://discord.com/channels/{guild_id}/{self.channel.id}/{self.id}'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def thread(self) -> Optional[Thread]:
|
||||||
|
"""Optional[:class:`Thread`]: The public thread created from this message, if it exists.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
This does not retrieve archived threads, as they are not retained in the internal
|
||||||
|
cache. Use :meth:`fetch_thread` instead.
|
||||||
|
|
||||||
|
.. versionadded:: 2.4
|
||||||
|
"""
|
||||||
|
if self.guild is not None:
|
||||||
|
return self.guild.get_thread(self.id)
|
||||||
|
|
||||||
async def fetch(self) -> Message:
|
async def fetch(self) -> Message:
|
||||||
"""|coro|
|
"""|coro|
|
||||||
|
|
||||||
@ -1280,6 +1294,40 @@ class PartialMessage(Hashable):
|
|||||||
)
|
)
|
||||||
return Thread(guild=self.guild, state=self._state, data=data)
|
return Thread(guild=self.guild, state=self._state, data=data)
|
||||||
|
|
||||||
|
async def fetch_thread(self) -> Thread:
|
||||||
|
"""|coro|
|
||||||
|
|
||||||
|
Retrieves the public thread attached to this message.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
This method is an API call. For general usage, consider :attr:`thread` instead.
|
||||||
|
|
||||||
|
.. versionadded:: 2.4
|
||||||
|
|
||||||
|
Raises
|
||||||
|
-------
|
||||||
|
InvalidData
|
||||||
|
An unknown channel type was received from Discord
|
||||||
|
or the guild the thread belongs to is not the same
|
||||||
|
as the one in this object points to.
|
||||||
|
HTTPException
|
||||||
|
Retrieving the thread failed.
|
||||||
|
NotFound
|
||||||
|
There is no thread attached to this message.
|
||||||
|
Forbidden
|
||||||
|
You do not have permission to fetch this channel.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
--------
|
||||||
|
:class:`.Thread`
|
||||||
|
The public thread attached to this message.
|
||||||
|
"""
|
||||||
|
if self.guild is None:
|
||||||
|
raise ValueError('This message does not have guild info attached.')
|
||||||
|
|
||||||
|
return await self.guild.fetch_channel(self.id) # type: ignore # Can only be Thread in this case
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
async def reply(
|
async def reply(
|
||||||
self,
|
self,
|
||||||
@ -1572,6 +1620,7 @@ class Message(PartialMessage, Hashable):
|
|||||||
'_cs_raw_channel_mentions',
|
'_cs_raw_channel_mentions',
|
||||||
'_cs_raw_role_mentions',
|
'_cs_raw_role_mentions',
|
||||||
'_cs_system_content',
|
'_cs_system_content',
|
||||||
|
'_thread',
|
||||||
'tts',
|
'tts',
|
||||||
'content',
|
'content',
|
||||||
'webhook_id',
|
'webhook_id',
|
||||||
@ -1640,6 +1689,21 @@ class Message(PartialMessage, Hashable):
|
|||||||
except AttributeError:
|
except AttributeError:
|
||||||
self.guild = state._get_guild(utils._get_as_snowflake(data, 'guild_id'))
|
self.guild = state._get_guild(utils._get_as_snowflake(data, 'guild_id'))
|
||||||
|
|
||||||
|
self._thread: Optional[Thread] = None
|
||||||
|
|
||||||
|
if self.guild is not None:
|
||||||
|
try:
|
||||||
|
thread = data['thread']
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
self._thread = self.guild.get_thread(int(thread['id']))
|
||||||
|
|
||||||
|
if self._thread is not None:
|
||||||
|
self._thread._update(thread)
|
||||||
|
else:
|
||||||
|
self._thread = Thread(guild=self.guild, state=state, data=thread)
|
||||||
|
|
||||||
self.interaction: Optional[MessageInteraction] = None
|
self.interaction: Optional[MessageInteraction] = None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -1982,6 +2046,21 @@ class Message(PartialMessage, Hashable):
|
|||||||
"""Optional[:class:`datetime.datetime`]: An aware UTC datetime object containing the edited time of the message."""
|
"""Optional[:class:`datetime.datetime`]: An aware UTC datetime object containing the edited time of the message."""
|
||||||
return self._edited_timestamp
|
return self._edited_timestamp
|
||||||
|
|
||||||
|
@property
|
||||||
|
def thread(self) -> Optional[Thread]:
|
||||||
|
"""Optional[:class:`Thread`]: The public thread created from this message, if it exists.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
For messages received via the gateway this does not retrieve archived threads, as they
|
||||||
|
are not retained in the internal cache. Use :meth:`fetch_thread` instead.
|
||||||
|
|
||||||
|
.. versionadded:: 2.4
|
||||||
|
"""
|
||||||
|
if self.guild is not None:
|
||||||
|
# Fall back to guild threads in case one was created after the message
|
||||||
|
return self._thread or self.guild.get_thread(self.id)
|
||||||
|
|
||||||
def is_system(self) -> bool:
|
def is_system(self) -> bool:
|
||||||
""":class:`bool`: Whether the message is a system message.
|
""":class:`bool`: Whether the message is a system message.
|
||||||
|
|
||||||
|
@ -36,6 +36,7 @@ from .channel import ChannelType
|
|||||||
from .components import Component
|
from .components import Component
|
||||||
from .interactions import MessageInteraction
|
from .interactions import MessageInteraction
|
||||||
from .sticker import StickerItem
|
from .sticker import StickerItem
|
||||||
|
from .threads import Thread
|
||||||
|
|
||||||
|
|
||||||
class PartialMessage(TypedDict):
|
class PartialMessage(TypedDict):
|
||||||
@ -146,6 +147,7 @@ class Message(PartialMessage):
|
|||||||
components: NotRequired[List[Component]]
|
components: NotRequired[List[Component]]
|
||||||
position: NotRequired[int]
|
position: NotRequired[int]
|
||||||
role_subscription_data: NotRequired[RoleSubscriptionData]
|
role_subscription_data: NotRequired[RoleSubscriptionData]
|
||||||
|
thread: NotRequired[Thread]
|
||||||
|
|
||||||
|
|
||||||
AllowedMentionType = Literal['roles', 'users', 'everyone']
|
AllowedMentionType = Literal['roles', 'users', 'everyone']
|
||||||
|
Loading…
x
Reference in New Issue
Block a user