diff --git a/discord/abc.py b/discord/abc.py index 57c26ad90f86..bbf22c201810 100644 --- a/discord/abc.py +++ b/discord/abc.py @@ -1039,10 +1039,6 @@ async def clone( .. versionadded:: 1.1 - .. versionchanged:: 2.5 - - The ``category`` keyword-only parameter was added. - Parameters ------------ name: Optional[:class:`str`] @@ -1051,6 +1047,8 @@ async def clone( category: Optional[:class:`~discord.CategoryChannel`] The category the new channel belongs to. This parameter is ignored if cloning a category channel. + + .. versionadded:: 2.5 reason: Optional[:class:`str`] The reason for cloning this channel. Shows up on the audit log. diff --git a/discord/channel.py b/discord/channel.py index b8858f356693..58fc2524f40b 100644 --- a/discord/channel.py +++ b/discord/channel.py @@ -532,14 +532,16 @@ async def clone( category: Optional[CategoryChannel] = None, reason: Optional[str] = None, ) -> TextChannel: + base: Dict[Any, Any] = { + 'topic': self.topic, + 'nsfw': self.nsfw, + 'default_auto_archive_duration': self.default_auto_archive_duration, + 'default_thread_rate_limit_per_user': self.default_thread_slowmode_delay, + } + if not self.is_news(): + base['rate_limit_per_user'] = self.slowmode_delay return await self._clone_impl( - { - 'topic': self.topic, - 'rate_limit_per_user': self.slowmode_delay, - 'nsfw': self.nsfw, - 'default_auto_archive_duration': self.default_auto_archive_duration, - 'default_thread_rate_limit_per_user': self.default_thread_slowmode_delay, - }, + base, name=name, category=category, reason=reason, @@ -1395,7 +1397,9 @@ async def create_webhook(self, *, name: str, avatar: Optional[bytes] = None, rea return Webhook.from_state(data, state=self._state) @utils.copy_doc(discord.abc.GuildChannel.clone) - async def clone(self, *, name: Optional[str] = None, reason: Optional[str] = None) -> Self: + async def clone( + self, *, name: Optional[str] = None, category: Optional[CategoryChannel] = None, reason: Optional[str] = None + ) -> Self: base = { 'bitrate': self.bitrate, 'user_limit': self.user_limit, @@ -1409,6 +1413,7 @@ async def clone(self, *, name: Optional[str] = None, reason: Optional[str] = Non return await self._clone_impl( base, name=name, + category=category, reason=reason, ) @@ -1506,18 +1511,6 @@ def type(self) -> Literal[ChannelType.voice]: """:class:`ChannelType`: The channel's Discord type.""" return ChannelType.voice - @utils.copy_doc(discord.abc.GuildChannel.clone) - async def clone( - self, - *, - name: Optional[str] = None, - category: Optional[CategoryChannel] = None, - reason: Optional[str] = None, - ) -> VoiceChannel: - return await self._clone_impl( - {'bitrate': self.bitrate, 'user_limit': self.user_limit}, name=name, category=category, reason=reason - ) - @overload async def edit(self) -> None: ... @@ -1788,16 +1781,6 @@ def type(self) -> Literal[ChannelType.stage_voice]: """:class:`ChannelType`: The channel's Discord type.""" return ChannelType.stage_voice - @utils.copy_doc(discord.abc.GuildChannel.clone) - async def clone( - self, - *, - name: Optional[str] = None, - category: Optional[CategoryChannel] = None, - reason: Optional[str] = None, - ) -> StageChannel: - return await self._clone_impl({}, name=name, category=category, reason=reason) - @property def instance(self) -> Optional[StageInstance]: """Optional[:class:`StageInstance`]: The running stage instance of the stage channel. diff --git a/discord/ext/commands/parameters.py b/discord/ext/commands/parameters.py index 70df39534aef..33592c74a6b5 100644 --- a/discord/ext/commands/parameters.py +++ b/discord/ext/commands/parameters.py @@ -247,6 +247,12 @@ async def wave(ctx, to: discord.User = commands.parameter(default=lambda ctx: ct .. versionadded:: 2.3 """ + if isinstance(default, Parameter): + if displayed_default is empty: + displayed_default = default._displayed_default + + default = default._default + return Parameter( name='empty', kind=inspect.Parameter.POSITIONAL_OR_KEYWORD, diff --git a/discord/sku.py b/discord/sku.py index 9ad325366da4..f3e457505354 100644 --- a/discord/sku.py +++ b/discord/sku.py @@ -27,6 +27,8 @@ from typing import AsyncIterator, Optional, TYPE_CHECKING +from datetime import datetime + from . import utils from .enums import try_enum, SKUType, EntitlementType from .flags import SKUFlags @@ -34,8 +36,6 @@ from .subscription import Subscription if TYPE_CHECKING: - from datetime import datetime - from .abc import SnowflakeTime, Snowflake from .guild import Guild from .state import ConnectionState