Add ability to set a flag description.

This PR adds the ability to set a flag description that shows in the slash command options menu.
This commit is contained in:
Soheab 2021-10-12 22:53:37 +02:00
parent 0abac8698d
commit fbed02dc4d
2 changed files with 21 additions and 5 deletions

View File

@ -1226,15 +1226,25 @@ class Command(_BaseCommand, Generic[CogT, P, T]):
ctx.command = original
def _param_to_options(
self, name: str, annotation: Any, required: bool, varadic: bool
self, name: str, annotation: Any, required: bool, varadic: bool, description=None
) -> List[Optional[ApplicationCommandInteractionDataOption]]:
if description is not None:
self.option_descriptions[name] = description
description = self.option_descriptions[name]
origin = getattr(annotation, "__origin__", None)
if inspect.isclass(annotation) and issubclass(annotation, FlagConverter):
return [
param
for name, flag in annotation.get_flags().items()
for param in self._param_to_options(
name, flag.annotation, required=flag.required, varadic=flag.annotation is tuple
name,
flag.annotation,
required=flag.required,
varadic=flag.annotation is tuple,
description=flag.description if flag.description is not MISSING else None,
)
]
@ -1250,7 +1260,7 @@ class Command(_BaseCommand, Generic[CogT, P, T]):
"type": 3,
"name": name,
"required": required,
"description": self.option_descriptions[name],
"description": description,
}
if origin is None:

View File

@ -81,6 +81,8 @@ class Flag:
------------
name: :class:`str`
The name of the flag.
description: :class:`str`
The description of the flag.
aliases: List[:class:`str`]
The aliases of the flag name.
attribute: :class:`str`
@ -96,7 +98,8 @@ class Flag:
Whether multiple given values overrides the previous value.
"""
name: str = MISSING
name: str = MISSING,
description: str = MISSING,
aliases: List[str] = field(default_factory=list)
attribute: str = MISSING
annotation: Any = MISSING
@ -117,6 +120,7 @@ class Flag:
def flag(
*,
name: str = MISSING,
description: str = MISSING,
aliases: List[str] = MISSING,
default: Any = MISSING,
max_args: int = MISSING,
@ -129,6 +133,8 @@ def flag(
------------
name: :class:`str`
The flag name. If not given, defaults to the attribute name.
description: :class:`str`
Description of the flag for the slash commands options. The default value is `'no description'`.
aliases: List[:class:`str`]
Aliases to the flag name. If not given no aliases are set.
default: Any
@ -143,7 +149,7 @@ def flag(
Whether multiple given values overrides the previous value. The default
value depends on the annotation given.
"""
return Flag(name=name, aliases=aliases, default=default, max_args=max_args, override=override)
return Flag(name=name, description=description, aliases=aliases, default=default, max_args=max_args, override=override)
def validate_flag_name(name: str, forbidden: Set[str]):