mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-07-23 11:26:51 +00:00
Add support for default_sort_order in ForumChannel
This commit is contained in:
parent
60094b17a9
commit
a1295868a6
@ -47,7 +47,7 @@ import datetime
|
|||||||
import discord.abc
|
import discord.abc
|
||||||
from .scheduled_event import ScheduledEvent
|
from .scheduled_event import ScheduledEvent
|
||||||
from .permissions import PermissionOverwrite, Permissions
|
from .permissions import PermissionOverwrite, Permissions
|
||||||
from .enums import ChannelType, ForumLayoutType, PrivacyLevel, try_enum, VideoQualityMode, EntityType
|
from .enums import ChannelType, ForumLayoutType, ForumOrderType, PrivacyLevel, try_enum, VideoQualityMode, EntityType
|
||||||
from .mixins import Hashable
|
from .mixins import Hashable
|
||||||
from . import utils
|
from . import utils
|
||||||
from .utils import MISSING
|
from .utils import MISSING
|
||||||
@ -2154,6 +2154,10 @@ class ForumChannel(discord.abc.GuildChannel, Hashable):
|
|||||||
Defaults to :attr:`ForumLayoutType.not_set`.
|
Defaults to :attr:`ForumLayoutType.not_set`.
|
||||||
|
|
||||||
.. versionadded:: 2.2
|
.. versionadded:: 2.2
|
||||||
|
default_sort_order: Optional[:class:`ForumOrderType`]
|
||||||
|
The default sort order for posts in this forum channel.
|
||||||
|
|
||||||
|
.. versionadded:: 2.3
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__slots__ = (
|
__slots__ = (
|
||||||
@ -2173,6 +2177,7 @@ class ForumChannel(discord.abc.GuildChannel, Hashable):
|
|||||||
'default_thread_slowmode_delay',
|
'default_thread_slowmode_delay',
|
||||||
'default_reaction_emoji',
|
'default_reaction_emoji',
|
||||||
'default_layout',
|
'default_layout',
|
||||||
|
'default_sort_order',
|
||||||
'_available_tags',
|
'_available_tags',
|
||||||
'_flags',
|
'_flags',
|
||||||
)
|
)
|
||||||
@ -2218,6 +2223,11 @@ class ForumChannel(discord.abc.GuildChannel, Hashable):
|
|||||||
name=default_reaction_emoji.get('emoji_name') or '',
|
name=default_reaction_emoji.get('emoji_name') or '',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.default_sort_order: Optional[ForumOrderType] = None
|
||||||
|
default_sort_order = data.get('default_sort_order')
|
||||||
|
if default_sort_order is not None:
|
||||||
|
self.default_sort_order = try_enum(ForumOrderType, default_sort_order)
|
||||||
|
|
||||||
self._flags: int = data.get('flags', 0)
|
self._flags: int = data.get('flags', 0)
|
||||||
self._fill_overwrites(data)
|
self._fill_overwrites(data)
|
||||||
|
|
||||||
@ -2344,6 +2354,7 @@ class ForumChannel(discord.abc.GuildChannel, Hashable):
|
|||||||
default_thread_slowmode_delay: int = ...,
|
default_thread_slowmode_delay: int = ...,
|
||||||
default_reaction_emoji: Optional[EmojiInputType] = ...,
|
default_reaction_emoji: Optional[EmojiInputType] = ...,
|
||||||
default_layout: ForumLayoutType = ...,
|
default_layout: ForumLayoutType = ...,
|
||||||
|
default_sort_order: ForumOrderType = ...,
|
||||||
require_tag: bool = ...,
|
require_tag: bool = ...,
|
||||||
) -> ForumChannel:
|
) -> ForumChannel:
|
||||||
...
|
...
|
||||||
@ -2402,6 +2413,10 @@ class ForumChannel(discord.abc.GuildChannel, Hashable):
|
|||||||
The new default layout for posts in this forum.
|
The new default layout for posts in this forum.
|
||||||
|
|
||||||
.. versionadded:: 2.2
|
.. versionadded:: 2.2
|
||||||
|
default_sort_order: Optional[:class:`ForumOrderType`]
|
||||||
|
The new default sort order for posts in this forum.
|
||||||
|
|
||||||
|
.. versionadded:: 2.3
|
||||||
require_tag: :class:`bool`
|
require_tag: :class:`bool`
|
||||||
Whether to require a tag for threads in this channel or not.
|
Whether to require a tag for threads in this channel or not.
|
||||||
|
|
||||||
@ -2464,6 +2479,21 @@ class ForumChannel(discord.abc.GuildChannel, Hashable):
|
|||||||
|
|
||||||
options['default_forum_layout'] = layout.value
|
options['default_forum_layout'] = layout.value
|
||||||
|
|
||||||
|
try:
|
||||||
|
sort_order = options.pop('default_sort_order')
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
if sort_order is None:
|
||||||
|
options['default_sort_order'] = None
|
||||||
|
else:
|
||||||
|
if not isinstance(sort_order, ForumOrderType):
|
||||||
|
raise TypeError(
|
||||||
|
f'default_sort_order parameter must be a ForumOrderType not {sort_order.__class__.__name__}'
|
||||||
|
)
|
||||||
|
|
||||||
|
options['default_sort_order'] = sort_order.value
|
||||||
|
|
||||||
payload = await self._edit(options, reason=reason)
|
payload = await self._edit(options, reason=reason)
|
||||||
if payload is not None:
|
if payload is not None:
|
||||||
# the payload will always be the proper channel payload
|
# the payload will always be the proper channel payload
|
||||||
|
@ -67,6 +67,7 @@ __all__ = (
|
|||||||
'AutoModRuleEventType',
|
'AutoModRuleEventType',
|
||||||
'AutoModRuleActionType',
|
'AutoModRuleActionType',
|
||||||
'ForumLayoutType',
|
'ForumLayoutType',
|
||||||
|
'ForumOrderType',
|
||||||
)
|
)
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
@ -751,6 +752,11 @@ class ForumLayoutType(Enum):
|
|||||||
gallery_view = 2
|
gallery_view = 2
|
||||||
|
|
||||||
|
|
||||||
|
class ForumOrderType(Enum):
|
||||||
|
latest_activity = 0
|
||||||
|
creation_date = 1
|
||||||
|
|
||||||
|
|
||||||
def create_unknown_value(cls: Type[E], val: Any) -> E:
|
def create_unknown_value(cls: Type[E], val: Any) -> E:
|
||||||
value_cls = cls._enum_value_cls_ # type: ignore # This is narrowed below
|
value_cls = cls._enum_value_cls_ # type: ignore # This is narrowed below
|
||||||
name = f'unknown_{val}'
|
name = f'unknown_{val}'
|
||||||
|
@ -73,6 +73,7 @@ from .enums import (
|
|||||||
MFALevel,
|
MFALevel,
|
||||||
Locale,
|
Locale,
|
||||||
AutoModRuleEventType,
|
AutoModRuleEventType,
|
||||||
|
ForumOrderType,
|
||||||
)
|
)
|
||||||
from .mixins import Hashable
|
from .mixins import Hashable
|
||||||
from .user import User
|
from .user import User
|
||||||
@ -1576,6 +1577,7 @@ class Guild(Hashable):
|
|||||||
reason: Optional[str] = None,
|
reason: Optional[str] = None,
|
||||||
default_auto_archive_duration: int = MISSING,
|
default_auto_archive_duration: int = MISSING,
|
||||||
default_thread_slowmode_delay: int = MISSING,
|
default_thread_slowmode_delay: int = MISSING,
|
||||||
|
default_sort_order: Optional[ForumOrderType] = None,
|
||||||
available_tags: Sequence[ForumTag] = MISSING,
|
available_tags: Sequence[ForumTag] = MISSING,
|
||||||
) -> ForumChannel:
|
) -> ForumChannel:
|
||||||
"""|coro|
|
"""|coro|
|
||||||
@ -1620,6 +1622,10 @@ class Guild(Hashable):
|
|||||||
The default slowmode delay in seconds for threads created in this forum.
|
The default slowmode delay in seconds for threads created in this forum.
|
||||||
|
|
||||||
.. versionadded:: 2.1
|
.. versionadded:: 2.1
|
||||||
|
default_sort_order: Optional[:class:`ForumOrderType`]
|
||||||
|
The default sort order for posts in this forum channel.
|
||||||
|
|
||||||
|
.. versionadded:: 2.3
|
||||||
available_tags: Sequence[:class:`ForumTag`]
|
available_tags: Sequence[:class:`ForumTag`]
|
||||||
The available tags for this forum channel.
|
The available tags for this forum channel.
|
||||||
|
|
||||||
@ -1659,6 +1665,16 @@ class Guild(Hashable):
|
|||||||
if default_thread_slowmode_delay is not MISSING:
|
if default_thread_slowmode_delay is not MISSING:
|
||||||
options['default_thread_rate_limit_per_user'] = default_thread_slowmode_delay
|
options['default_thread_rate_limit_per_user'] = default_thread_slowmode_delay
|
||||||
|
|
||||||
|
if default_sort_order is None:
|
||||||
|
options['default_sort_order'] = None
|
||||||
|
else:
|
||||||
|
if not isinstance(default_sort_order, ForumOrderType):
|
||||||
|
raise TypeError(
|
||||||
|
f'default_sort_order parameter must be a ForumOrderType not {default_sort_order.__class__.__name__}'
|
||||||
|
)
|
||||||
|
|
||||||
|
options['default_sort_order'] = default_sort_order.value
|
||||||
|
|
||||||
if available_tags is not MISSING:
|
if available_tags is not MISSING:
|
||||||
options['available_tags'] = [t.to_dict() for t in available_tags]
|
options['available_tags'] = [t.to_dict() for t in available_tags]
|
||||||
|
|
||||||
|
@ -1148,6 +1148,7 @@ class HTTPClient:
|
|||||||
'available_tags',
|
'available_tags',
|
||||||
'applied_tags',
|
'applied_tags',
|
||||||
'default_forum_layout',
|
'default_forum_layout',
|
||||||
|
'default_sort_order',
|
||||||
)
|
)
|
||||||
|
|
||||||
payload = {k: v for k, v in options.items() if k in valid_keys}
|
payload = {k: v for k, v in options.items() if k in valid_keys}
|
||||||
@ -1189,6 +1190,7 @@ class HTTPClient:
|
|||||||
'video_quality_mode',
|
'video_quality_mode',
|
||||||
'default_auto_archive_duration',
|
'default_auto_archive_duration',
|
||||||
'default_thread_rate_limit_per_user',
|
'default_thread_rate_limit_per_user',
|
||||||
|
'default_sort_order',
|
||||||
'available_tags',
|
'available_tags',
|
||||||
)
|
)
|
||||||
payload.update({k: v for k, v in options.items() if k in valid_keys and v is not None})
|
payload.update({k: v for k, v in options.items() if k in valid_keys and v is not None})
|
||||||
|
@ -134,6 +134,7 @@ class ForumTag(TypedDict):
|
|||||||
emoji_name: Optional[str]
|
emoji_name: Optional[str]
|
||||||
|
|
||||||
|
|
||||||
|
ForumOrderType = Literal[0, 1]
|
||||||
ForumLayoutType = Literal[0, 1, 2]
|
ForumLayoutType = Literal[0, 1, 2]
|
||||||
|
|
||||||
|
|
||||||
@ -141,6 +142,7 @@ class ForumChannel(_BaseTextChannel):
|
|||||||
type: Literal[15]
|
type: Literal[15]
|
||||||
available_tags: List[ForumTag]
|
available_tags: List[ForumTag]
|
||||||
default_reaction_emoji: Optional[DefaultReaction]
|
default_reaction_emoji: Optional[DefaultReaction]
|
||||||
|
default_sort_order: Optional[ForumOrderType]
|
||||||
default_forum_layout: NotRequired[ForumLayoutType]
|
default_forum_layout: NotRequired[ForumLayoutType]
|
||||||
flags: NotRequired[int]
|
flags: NotRequired[int]
|
||||||
|
|
||||||
|
15
docs/api.rst
15
docs/api.rst
@ -3310,6 +3310,21 @@ of :class:`enum.Enum`.
|
|||||||
Displays posts as a collection of tiles.
|
Displays posts as a collection of tiles.
|
||||||
|
|
||||||
|
|
||||||
|
.. class:: ForumOrderType
|
||||||
|
|
||||||
|
Represents how a forum's posts are sorted in the client.
|
||||||
|
|
||||||
|
.. versionadded:: 2.3
|
||||||
|
|
||||||
|
.. attribute:: latest_activity
|
||||||
|
|
||||||
|
Sort forum posts by activity.
|
||||||
|
|
||||||
|
.. attribute:: creation_date
|
||||||
|
|
||||||
|
Sort forum posts by creation time (from most recent to oldest).
|
||||||
|
|
||||||
|
|
||||||
.. _discord-api-audit-logs:
|
.. _discord-api-audit-logs:
|
||||||
|
|
||||||
Audit Log Data
|
Audit Log Data
|
||||||
|
Loading…
x
Reference in New Issue
Block a user