diff --git a/discord/webhook/async_.py b/discord/webhook/async_.py index d73ab0eab..7486415c2 100644 --- a/discord/webhook/async_.py +++ b/discord/webhook/async_.py @@ -253,9 +253,12 @@ class AsyncWebhookAdapter: payload: Optional[Dict[str, Any]] = None, multipart: Optional[List[Dict[str, Any]]] = None, files: Optional[List[File]] = None, + thread_id: Optional[int] = None, wait: bool = False, ): params = {'wait': int(wait)} + if thread_id: + params['thread_id'] = thread_id route = Route('POST', '/webhooks/{webhook_id}/{webhook_token}', webhook_id=webhook_id, webhook_token=token) return self.request(route, session, payload=payload, multipart=multipart, files=files, params=params) @@ -1162,6 +1165,7 @@ class Webhook(BaseWebhook): embeds: List[Embed] = MISSING, allowed_mentions: AllowedMentions = MISSING, view: View = MISSING, + thread: Snowflake = MISSING, wait: Literal[True], ) -> WebhookMessage: ... @@ -1181,6 +1185,7 @@ class Webhook(BaseWebhook): embeds: List[Embed] = MISSING, allowed_mentions: AllowedMentions = MISSING, view: View = MISSING, + thread: Snowflake = MISSING, wait: Literal[False] = ..., ) -> None: ... @@ -1199,6 +1204,7 @@ class Webhook(BaseWebhook): embeds: List[Embed] = MISSING, allowed_mentions: AllowedMentions = MISSING, view: View = MISSING, + thread: Snowflake = MISSING, wait: bool = False, ) -> Optional[WebhookMessage]: """|coro| @@ -1249,12 +1255,20 @@ class Webhook(BaseWebhook): be mixed with the ``embed`` parameter. allowed_mentions: :class:`AllowedMentions` Controls the mentions being processed in this message. + + .. versionadded:: 1.4 view: :class:`discord.ui.View` The view to send with the message. You can only send a view if this webhook is not partial and has state attached. A webhook has state attached if the webhook is managed by the library. + .. versionadded:: 2.0 + thread: :class:`~discord.abc.Snowflake` + The thread to send this webhook to. + + .. versionadded:: 2.0 + Raises -------- HTTPException @@ -1313,6 +1327,10 @@ class Webhook(BaseWebhook): previous_allowed_mentions=previous_mentions, ) adapter = async_context.get() + thread_id: Optional[int] = None + if thread is not MISSING: + thread_id = thread.id + data = await adapter.execute_webhook( self.id, self.token, @@ -1320,6 +1338,7 @@ class Webhook(BaseWebhook): payload=params.payload, multipart=params.multipart, files=params.files, + thread_id=thread_id, wait=wait, ) diff --git a/discord/webhook/sync.py b/discord/webhook/sync.py index 2ad7b7534..2d1557f5b 100644 --- a/discord/webhook/sync.py +++ b/discord/webhook/sync.py @@ -262,9 +262,12 @@ class WebhookAdapter: payload: Optional[Dict[str, Any]] = None, multipart: Optional[List[Dict[str, Any]]] = None, files: Optional[List[File]] = None, + thread_id: Optional[int] = None, wait: bool = False, ): params = {'wait': int(wait)} + if thread_id: + params['thread_id'] = thread_id route = Route('POST', '/webhooks/{webhook_id}/{webhook_token}', webhook_id=webhook_id, webhook_token=token) return self.request(route, session, payload=payload, multipart=multipart, files=files, params=params) @@ -780,6 +783,7 @@ class SyncWebhook(BaseWebhook): embed: Embed = MISSING, embeds: List[Embed] = MISSING, allowed_mentions: AllowedMentions = MISSING, + thread: Snowflake = MISSING, wait: bool = False, ) -> Optional[SyncWebhookMessage]: """Sends a message using the webhook. @@ -824,6 +828,10 @@ class SyncWebhook(BaseWebhook): Controls the mentions being processed in this message. .. versionadded:: 1.4 + thread: :class:`~discord.abc.Snowflake` + The thread to send this message to. + + .. versionadded:: 2.0 Raises -------- @@ -866,6 +874,10 @@ class SyncWebhook(BaseWebhook): previous_allowed_mentions=previous_mentions, ) adapter: WebhookAdapter = _context.adapter + thread_id: Optional[int] = None + if thread is not MISSING: + thread_id = thread.id + data = adapter.execute_webhook( self.id, self.token, @@ -873,6 +885,7 @@ class SyncWebhook(BaseWebhook): payload=params.payload, multipart=params.multipart, files=params.files, + thread_id=thread_id, wait=wait, ) if wait: