diff --git a/discord/ext/commands/converter.py b/discord/ext/commands/converter.py index feff650d..bbef6719 100644 --- a/discord/ext/commands/converter.py +++ b/discord/ext/commands/converter.py @@ -1032,6 +1032,8 @@ class Option(Generic[T, DT]): # type: ignore The default for this option, overwrites Option during parsing. description: :class:`str` The description for this option, is unpacked to :attr:`.Command.option_descriptions` + name: :class:`str` + The name of the option. This defaults to the parameter name. """ description: DT @@ -1039,16 +1041,20 @@ class Option(Generic[T, DT]): # type: ignore __slots__ = ( "default", "description", + "name", ) - def __init__(self, default: T = inspect.Parameter.empty, *, description: DT) -> None: + def __init__( + self, default: T = inspect.Parameter.empty, *, description: DT, name: str = discord.utils.MISSING + ) -> None: self.description = description self.default = default + self.name: str = name if TYPE_CHECKING: # Terrible workaround for type checking reasons - def Option(default: T = inspect.Parameter.empty, *, description: str) -> T: + def Option(default: T = inspect.Parameter.empty, *, description: str, name: str = discord.utils.MISSING) -> T: ... diff --git a/discord/ext/commands/core.py b/discord/ext/commands/core.py index 42ef5ff9..3d6a9631 100644 --- a/discord/ext/commands/core.py +++ b/discord/ext/commands/core.py @@ -174,8 +174,12 @@ def get_signature_parameters( annotation = parameter.annotation if isinstance(parameter.default, Option): # type: ignore option = parameter.default - descriptions[name] = option.description parameter = parameter.replace(default=option.default) + if option.name is not MISSING: + name = option.name + parameter.replace(name=name) + + descriptions[name] = option.description if annotation is parameter.empty: params[name] = parameter @@ -1284,7 +1288,11 @@ class Command(_BaseCommand, Generic[CogT, P, T]): elif all([arg in application_option_channel_types for arg in annotation.__args__]): option["type"] = 7 - option["channel_types"] = [discord_value for arg in annotation.__args__ for discord_value in application_option_channel_types[arg]] + option["channel_types"] = [ + discord_value + for arg in annotation.__args__ + for discord_value in application_option_channel_types[arg] + ] elif origin is Literal: literal_values = annotation.__args__