diff --git a/discord/guild.py b/discord/guild.py index 93f16bdd8..979210656 100644 --- a/discord/guild.py +++ b/discord/guild.py @@ -73,6 +73,7 @@ from .enums import ( Locale, AutoModRuleEventType, ForumOrderType, + ForumLayoutType, ) from .mixins import Hashable from .user import User @@ -95,6 +96,7 @@ from .application import PartialApplication from .guild_premium import PremiumGuildSubscription from .entitlements import Entitlement from .automod import AutoModRule, AutoModTrigger, AutoModRuleAction +from .partial_emoji import _EmojiTag, PartialEmoji if TYPE_CHECKING: from .abc import Snowflake, SnowflakeTime @@ -127,6 +129,7 @@ if TYPE_CHECKING: from .types.integration import IntegrationType from .types.snowflake import SnowflakeList, Snowflake as _Snowflake from .types.widget import EditWidgetSettings + from .message import EmojiInputType VocalGuildChannel = Union[VoiceChannel, StageChannel] GuildChannel = Union[VocalGuildChannel, ForumChannel, TextChannel, CategoryChannel] @@ -1671,7 +1674,9 @@ class Guild(Hashable): reason: Optional[str] = None, default_auto_archive_duration: int = MISSING, default_thread_slowmode_delay: int = MISSING, - default_sort_order: Optional[ForumOrderType] = None, + default_sort_order: Optional[ForumOrderType] = MISSING, + default_reaction_emoji: Optional[EmojiInputType] = MISSING, + default_layout: Optional[ForumLayoutType] = MISSING, available_tags: Sequence[ForumTag] = MISSING, ) -> ForumChannel: """|coro| @@ -1716,6 +1721,11 @@ class Guild(Hashable): The default slowmode delay in seconds for threads created in this forum. default_sort_order: Optional[:class:`ForumOrderType`] The default sort order for posts in this forum channel. + default_reaction_emoji: Optional[Union[:class:`Emoji`, :class:`PartialEmoji`, :class:`str`]] + The default reaction emoji for threads created in this forum to show in the + add reaction button. + default_layout: Optional[:class:`ForumLayoutType`] + The default layout for posts in this forum. available_tags: Sequence[:class:`ForumTag`] The available tags for this forum channel. @@ -1753,9 +1763,7 @@ class Guild(Hashable): if default_thread_slowmode_delay is not MISSING: options['default_thread_rate_limit_per_user'] = default_thread_slowmode_delay - if default_sort_order is None: - options['default_sort_order'] = None - else: + if default_sort_order not in (MISSING, None): if not isinstance(default_sort_order, ForumOrderType): raise TypeError( f'default_sort_order parameter must be a ForumOrderType not {default_sort_order.__class__.__name__}' @@ -1763,6 +1771,22 @@ class Guild(Hashable): options['default_sort_order'] = default_sort_order.value + if default_reaction_emoji not in (MISSING, None): + if isinstance(default_reaction_emoji, _EmojiTag): + options['default_reaction_emoji'] = default_reaction_emoji._to_partial()._to_forum_tag_payload() + elif isinstance(default_reaction_emoji, str): + options['default_reaction_emoji'] = PartialEmoji.from_str(default_reaction_emoji)._to_forum_tag_payload() + else: + raise ValueError(f'default_reaction_emoji parameter must be either Emoji, PartialEmoji, or str') + + if default_layout not in (MISSING, None): + if not isinstance(default_layout, ForumLayoutType): + raise TypeError( + f'default_layout parameter must be a ForumLayoutType not {default_layout.__class__.__name__}' + ) + + options['default_forum_layout'] = default_layout.value + if available_tags is not MISSING: options['available_tags'] = [t.to_dict() for t in available_tags] diff --git a/discord/http.py b/discord/http.py index 1f9780578..410a3c723 100644 --- a/discord/http.py +++ b/discord/http.py @@ -1421,6 +1421,8 @@ class HTTPClient: 'default_auto_archive_duration', 'default_thread_rate_limit_per_user', 'default_sort_order', + 'default_reaction_emoji', + 'default_forum_layout', 'available_tags', ) payload.update({k: v for k, v in options.items() if k in valid_keys and v is not None})