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
This commit is contained in:
Stocker 2021-10-16 10:00:56 -04:00 committed by GitHub
parent 838d9d8986
commit 983cbb3161
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 3 deletions

View File

@ -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:
...

View File

@ -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