From 983cbb3161db3c65f043d250a409f6ccb4f092b4 Mon Sep 17 00:00:00 2001 From: Stocker <44980366+StockerMC@users.noreply.github.com> Date: Sat, 16 Oct 2021 10:00:56 -0400 Subject: [PATCH] Add the ability to set the option name with commands.Option (#102) * Add the ability to set the option name with commands.Option * Document commands.Option.name --- discord/ext/commands/converter.py | 10 ++++++++-- discord/ext/commands/core.py | 6 +++++- 2 files changed, 13 insertions(+), 3 deletions(-) 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 88f31421..57299516 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