Add ability to set a flag description. (#99)

* 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-16 14:27:02 +02:00 committed by GitHub
parent e0bf2f9121
commit 838d9d8986
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 5 deletions

View File

@ -1234,15 +1234,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: Optional[str] = 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,
) )
] ]
@ -1258,7 +1268,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:
@ -1284,7 +1294,11 @@ class Command(_BaseCommand, Generic[CogT, P, T]):
elif all([arg in application_option_channel_types for arg in annotation.__args__]): elif all([arg in application_option_channel_types for arg in annotation.__args__]):
option["type"] = 7 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: elif origin is Literal:
literal_values = annotation.__args__ literal_values = annotation.__args__

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`
@ -97,6 +99,7 @@ class Flag:
""" """
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,9 @@ 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]):