mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-09-05 09:26:10 +00:00
Propagate thread_id in webhook message methods
This also adds the remaining thread parameters where they were missing
This commit is contained in:
@ -296,6 +296,7 @@ class WebhookAdapter:
|
||||
message_id: int,
|
||||
*,
|
||||
session: Session,
|
||||
thread_id: Optional[int] = None,
|
||||
) -> MessagePayload:
|
||||
route = Route(
|
||||
'GET',
|
||||
@ -304,7 +305,8 @@ class WebhookAdapter:
|
||||
webhook_token=token,
|
||||
message_id=message_id,
|
||||
)
|
||||
return self.request(route, session)
|
||||
params = None if thread_id is None else {'thread_id': thread_id}
|
||||
return self.request(route, session, params=params)
|
||||
|
||||
def edit_webhook_message(
|
||||
self,
|
||||
@ -316,6 +318,7 @@ class WebhookAdapter:
|
||||
payload: Optional[Dict[str, Any]] = None,
|
||||
multipart: Optional[List[Dict[str, Any]]] = None,
|
||||
files: Optional[Sequence[File]] = None,
|
||||
thread_id: Optional[int] = None,
|
||||
) -> MessagePayload:
|
||||
route = Route(
|
||||
'PATCH',
|
||||
@ -324,7 +327,8 @@ class WebhookAdapter:
|
||||
webhook_token=token,
|
||||
message_id=message_id,
|
||||
)
|
||||
return self.request(route, session, payload=payload, multipart=multipart, files=files)
|
||||
params = None if thread_id is None else {'thread_id': thread_id}
|
||||
return self.request(route, session, payload=payload, multipart=multipart, files=files, params=params)
|
||||
|
||||
def delete_webhook_message(
|
||||
self,
|
||||
@ -333,6 +337,7 @@ class WebhookAdapter:
|
||||
message_id: int,
|
||||
*,
|
||||
session: Session,
|
||||
thread_id: Optional[int] = None,
|
||||
) -> None:
|
||||
route = Route(
|
||||
'DELETE',
|
||||
@ -341,7 +346,8 @@ class WebhookAdapter:
|
||||
webhook_token=token,
|
||||
message_id=message_id,
|
||||
)
|
||||
return self.request(route, session)
|
||||
params = None if thread_id is None else {'thread_id': thread_id}
|
||||
return self.request(route, session, params=params)
|
||||
|
||||
def fetch_webhook(
|
||||
self,
|
||||
@ -451,6 +457,7 @@ class SyncWebhookMessage(Message):
|
||||
embed=embed,
|
||||
attachments=attachments,
|
||||
allowed_mentions=allowed_mentions,
|
||||
thread=self._state._thread,
|
||||
)
|
||||
|
||||
def add_files(self, *files: File) -> SyncWebhookMessage:
|
||||
@ -522,7 +529,7 @@ class SyncWebhookMessage(Message):
|
||||
|
||||
if delay is not None:
|
||||
time.sleep(delay)
|
||||
self._state._webhook.delete_message(self.id)
|
||||
self._state._webhook.delete_message(self.id, thread=self._state._thread)
|
||||
|
||||
|
||||
class SyncWebhook(BaseWebhook):
|
||||
@ -832,8 +839,8 @@ class SyncWebhook(BaseWebhook):
|
||||
|
||||
return SyncWebhook(data=data, session=self.session, token=self.auth_token, state=self._state)
|
||||
|
||||
def _create_message(self, data: MessagePayload) -> SyncWebhookMessage:
|
||||
state = _WebhookState(self, parent=self._state)
|
||||
def _create_message(self, data: MessagePayload, *, thread: Snowflake = MISSING) -> SyncWebhookMessage:
|
||||
state = _WebhookState(self, parent=self._state, thread=thread)
|
||||
# state may be artificial (unlikely at this point...)
|
||||
channel = self.channel or PartialMessageable(state=self._state, id=int(data['channel_id'])) # type: ignore
|
||||
# state is artificial
|
||||
@ -852,6 +859,7 @@ class SyncWebhook(BaseWebhook):
|
||||
embed: Embed = MISSING,
|
||||
embeds: Sequence[Embed] = MISSING,
|
||||
allowed_mentions: AllowedMentions = MISSING,
|
||||
thread: Snowflake = MISSING,
|
||||
wait: Literal[True],
|
||||
suppress_embeds: bool = MISSING,
|
||||
) -> SyncWebhookMessage:
|
||||
@ -870,6 +878,7 @@ class SyncWebhook(BaseWebhook):
|
||||
embed: Embed = MISSING,
|
||||
embeds: Sequence[Embed] = MISSING,
|
||||
allowed_mentions: AllowedMentions = MISSING,
|
||||
thread: Snowflake = MISSING,
|
||||
wait: Literal[False] = ...,
|
||||
suppress_embeds: bool = MISSING,
|
||||
) -> None:
|
||||
@ -1004,9 +1013,9 @@ class SyncWebhook(BaseWebhook):
|
||||
wait=wait,
|
||||
)
|
||||
if wait:
|
||||
return self._create_message(data)
|
||||
return self._create_message(data, thread=thread)
|
||||
|
||||
def fetch_message(self, id: int, /) -> SyncWebhookMessage:
|
||||
def fetch_message(self, id: int, /, *, thread: Snowflake = MISSING) -> SyncWebhookMessage:
|
||||
"""Retrieves a single :class:`~discord.SyncWebhookMessage` owned by this webhook.
|
||||
|
||||
.. versionadded:: 2.0
|
||||
@ -1015,6 +1024,8 @@ class SyncWebhook(BaseWebhook):
|
||||
------------
|
||||
id: :class:`int`
|
||||
The message ID to look for.
|
||||
thread: :class:`~discord.abc.Snowflake`
|
||||
The thread to look in.
|
||||
|
||||
Raises
|
||||
--------
|
||||
@ -1036,14 +1047,19 @@ class SyncWebhook(BaseWebhook):
|
||||
if self.token is None:
|
||||
raise ValueError('This webhook does not have a token associated with it')
|
||||
|
||||
thread_id: Optional[int] = None
|
||||
if thread is not MISSING:
|
||||
thread_id = thread.id
|
||||
|
||||
adapter: WebhookAdapter = _get_webhook_adapter()
|
||||
data = adapter.get_webhook_message(
|
||||
self.id,
|
||||
self.token,
|
||||
id,
|
||||
session=self.session,
|
||||
thread_id=thread_id,
|
||||
)
|
||||
return self._create_message(data)
|
||||
return self._create_message(data, thread=thread)
|
||||
|
||||
def edit_message(
|
||||
self,
|
||||
@ -1054,6 +1070,7 @@ class SyncWebhook(BaseWebhook):
|
||||
embed: Optional[Embed] = MISSING,
|
||||
attachments: Sequence[Union[Attachment, File]] = MISSING,
|
||||
allowed_mentions: Optional[AllowedMentions] = None,
|
||||
thread: Snowflake = MISSING,
|
||||
) -> SyncWebhookMessage:
|
||||
"""Edits a message owned by this webhook.
|
||||
|
||||
@ -1081,6 +1098,10 @@ class SyncWebhook(BaseWebhook):
|
||||
allowed_mentions: :class:`AllowedMentions`
|
||||
Controls the mentions being processed in this message.
|
||||
See :meth:`.abc.Messageable.send` for more information.
|
||||
thread: :class:`~discord.abc.Snowflake`
|
||||
The thread the webhook message belongs to.
|
||||
|
||||
.. versionadded:: 2.0
|
||||
|
||||
Raises
|
||||
-------
|
||||
@ -1107,6 +1128,11 @@ class SyncWebhook(BaseWebhook):
|
||||
allowed_mentions=allowed_mentions,
|
||||
previous_allowed_mentions=previous_mentions,
|
||||
)
|
||||
|
||||
thread_id: Optional[int] = None
|
||||
if thread is not MISSING:
|
||||
thread_id = thread.id
|
||||
|
||||
adapter: WebhookAdapter = _get_webhook_adapter()
|
||||
data = adapter.edit_webhook_message(
|
||||
self.id,
|
||||
@ -1116,10 +1142,11 @@ class SyncWebhook(BaseWebhook):
|
||||
payload=params.payload,
|
||||
multipart=params.multipart,
|
||||
files=params.files,
|
||||
thread_id=thread_id,
|
||||
)
|
||||
return self._create_message(data)
|
||||
return self._create_message(data, thread=thread)
|
||||
|
||||
def delete_message(self, message_id: int, /) -> None:
|
||||
def delete_message(self, message_id: int, /, *, thread: Snowflake = MISSING) -> None:
|
||||
"""Deletes a message owned by this webhook.
|
||||
|
||||
This is a lower level interface to :meth:`WebhookMessage.delete` in case
|
||||
@ -1131,6 +1158,10 @@ class SyncWebhook(BaseWebhook):
|
||||
------------
|
||||
message_id: :class:`int`
|
||||
The message ID to delete.
|
||||
hread: :class:`~discord.abc.Snowflake`
|
||||
The thread the webhook message belongs to.
|
||||
|
||||
.. versionadded:: 2.0
|
||||
|
||||
Raises
|
||||
-------
|
||||
@ -1144,10 +1175,15 @@ class SyncWebhook(BaseWebhook):
|
||||
if self.token is None:
|
||||
raise ValueError('This webhook does not have a token associated with it')
|
||||
|
||||
thread_id: Optional[int] = None
|
||||
if thread is not MISSING:
|
||||
thread_id = thread.id
|
||||
|
||||
adapter: WebhookAdapter = _get_webhook_adapter()
|
||||
adapter.delete_webhook_message(
|
||||
self.id,
|
||||
self.token,
|
||||
message_id,
|
||||
session=self.session,
|
||||
thread_id=thread_id,
|
||||
)
|
||||
|
Reference in New Issue
Block a user