From e543abd950be04940a8e77b0019f0d556305ac7a Mon Sep 17 00:00:00 2001 From: Rapptz Date: Tue, 31 May 2022 18:22:32 -0400 Subject: [PATCH] Add support for new thread_name parameter in Webhook.send --- discord/http.py | 4 ++++ discord/webhook/async_.py | 17 ++++++++++++++++- discord/webhook/sync.py | 15 +++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/discord/http.py b/discord/http.py index efadbd4b2..e54301b32 100644 --- a/discord/http.py +++ b/discord/http.py @@ -148,6 +148,7 @@ def handle_message_parameters( stickers: Optional[SnowflakeList] = MISSING, previous_allowed_mentions: Optional[AllowedMentions] = None, mention_author: Optional[bool] = None, + thread_name: str = MISSING, channel_payload: Dict[str, Any] = MISSING, ) -> MultipartParameters: if files is not MISSING and file is not MISSING: @@ -206,6 +207,9 @@ def handle_message_parameters( if flags is not MISSING: payload['flags'] = flags.value + if thread_name is not MISSING: + payload['thread_name'] = thread_name + if allowed_mentions: if previous_allowed_mentions is not None: payload['allowed_mentions'] = previous_allowed_mentions.merge(allowed_mentions).to_dict() diff --git a/discord/webhook/async_.py b/discord/webhook/async_.py index 4379a09b9..8d7ddcac2 100644 --- a/discord/webhook/async_.py +++ b/discord/webhook/async_.py @@ -1514,6 +1514,7 @@ class Webhook(BaseWebhook): allowed_mentions: AllowedMentions = MISSING, view: View = MISSING, thread: Snowflake = MISSING, + thread_name: str = MISSING, wait: Literal[True], suppress_embeds: bool = MISSING, ) -> WebhookMessage: @@ -1535,6 +1536,7 @@ class Webhook(BaseWebhook): allowed_mentions: AllowedMentions = MISSING, view: View = MISSING, thread: Snowflake = MISSING, + thread_name: str = MISSING, wait: Literal[False] = ..., suppress_embeds: bool = MISSING, ) -> None: @@ -1555,6 +1557,7 @@ class Webhook(BaseWebhook): allowed_mentions: AllowedMentions = MISSING, view: View = MISSING, thread: Snowflake = MISSING, + thread_name: str = MISSING, wait: bool = False, suppress_embeds: bool = False, ) -> Optional[WebhookMessage]: @@ -1625,6 +1628,13 @@ class Webhook(BaseWebhook): thread: :class:`~discord.abc.Snowflake` The thread to send this webhook to. + .. versionadded:: 2.0 + thread_name: :class:`str` + The thread name to create with this webhook if the webhook belongs + to a :class:`~discord.ForumChannel`. Note that this is mutually + exclusive with the ``thread`` parameter, as this will create a + new thread with the given name. + .. versionadded:: 2.0 suppress_embeds: :class:`bool` Whether to suppress embeds for the message. This sends the message without any embeds if set to ``True``. @@ -1640,7 +1650,8 @@ class Webhook(BaseWebhook): Forbidden The authorization token for the webhook is incorrect. TypeError - You specified both ``embed`` and ``embeds`` or ``file`` and ``files``. + You specified both ``embed`` and ``embeds`` or ``file`` and ``files`` + or ``thread`` and ``thread_name``. ValueError The length of ``embeds`` was invalid, there was no token associated with this webhook or ``ephemeral`` was passed @@ -1683,6 +1694,9 @@ class Webhook(BaseWebhook): if ephemeral is True and view.timeout is None: view.timeout = 15 * 60.0 + if thread_name is not MISSING and thread is not MISSING: + raise TypeError('Cannot mix thread_name and thread keyword arguments.') + params = handle_message_parameters( content=content, username=username, @@ -1694,6 +1708,7 @@ class Webhook(BaseWebhook): embeds=embeds, flags=flags, view=view, + thread_name=thread_name, allowed_mentions=allowed_mentions, previous_allowed_mentions=previous_mentions, ) diff --git a/discord/webhook/sync.py b/discord/webhook/sync.py index aa40e1989..24ca39717 100644 --- a/discord/webhook/sync.py +++ b/discord/webhook/sync.py @@ -864,6 +864,7 @@ class SyncWebhook(BaseWebhook): embeds: Sequence[Embed] = MISSING, allowed_mentions: AllowedMentions = MISSING, thread: Snowflake = MISSING, + thread_name: str = MISSING, wait: Literal[True], suppress_embeds: bool = MISSING, ) -> SyncWebhookMessage: @@ -883,6 +884,7 @@ class SyncWebhook(BaseWebhook): embeds: Sequence[Embed] = MISSING, allowed_mentions: AllowedMentions = MISSING, thread: Snowflake = MISSING, + thread_name: str = MISSING, wait: Literal[False] = ..., suppress_embeds: bool = MISSING, ) -> None: @@ -901,6 +903,7 @@ class SyncWebhook(BaseWebhook): embeds: Sequence[Embed] = MISSING, allowed_mentions: AllowedMentions = MISSING, thread: Snowflake = MISSING, + thread_name: str = MISSING, wait: bool = False, suppress_embeds: bool = False, ) -> Optional[SyncWebhookMessage]: @@ -950,6 +953,13 @@ class SyncWebhook(BaseWebhook): thread: :class:`~discord.abc.Snowflake` The thread to send this message to. + .. versionadded:: 2.0 + thread_name: :class:`str` + The thread name to create with this webhook if the webhook belongs + to a :class:`~discord.ForumChannel`. Note that this is mutually + exclusive with the ``thread`` parameter, as this will create a + new thread with the given name. + .. versionadded:: 2.0 suppress_embeds: :class:`bool` Whether to suppress embeds for the message. This sends the message without any embeds if set to ``True``. @@ -966,6 +976,7 @@ class SyncWebhook(BaseWebhook): The authorization token for the webhook is incorrect. TypeError You specified both ``embed`` and ``embeds`` or ``file`` and ``files`` + or ``thread`` and ``thread_name``. ValueError The length of ``embeds`` was invalid or there was no token associated with this webhook. @@ -988,6 +999,9 @@ class SyncWebhook(BaseWebhook): else: flags = MISSING + if thread_name is not MISSING and thread is not MISSING: + raise TypeError('Cannot mix thread_name and thread keyword arguments.') + params = handle_message_parameters( content=content, username=username, @@ -997,6 +1011,7 @@ class SyncWebhook(BaseWebhook): files=files, embed=embed, embeds=embeds, + thread_name=thread_name, allowed_mentions=allowed_mentions, previous_allowed_mentions=previous_mentions, flags=flags,