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 ctx.command = original
def _param_to_options( 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]]: ) -> List[Optional[ApplicationCommandInteractionDataOption]]:
if description is not None:
self.option_descriptions[name] = description
description = self.option_descriptions[name]
origin = getattr(annotation, "__origin__", None) origin = getattr(annotation, "__origin__", None)
if inspect.isclass(annotation) and issubclass(annotation, FlagConverter): if inspect.isclass(annotation) and issubclass(annotation, FlagConverter):
return [ return [
param param
for name, flag in annotation.get_flags().items() for name, flag in annotation.get_flags().items()
for param in self._param_to_options( 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, "type": 3,
"name": name, "name": name,
"required": required, "required": required,
"description": self.option_descriptions[name], "description": description,
} }
if origin is None: if origin is None:

View File

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