Add the ability to set the option name with commands.Option #102
@ -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:
|
||||
...
|
||||
|
||||
|
||||
|
@ -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__
|
||||
|
Loading…
x
Reference in New Issue
Block a user