diff --git a/discord/ext/commands/core.py b/discord/ext/commands/core.py index 42ef5ff9..88f31421 100644 --- a/discord/ext/commands/core.py +++ b/discord/ext/commands/core.py @@ -1234,15 +1234,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: Optional[str] = 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, ) ] @@ -1258,7 +1268,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: @@ -1284,7 +1294,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__ diff --git a/discord/ext/commands/flags.py b/discord/ext/commands/flags.py index 367127a4..10656167 100644 --- a/discord/ext/commands/flags.py +++ b/discord/ext/commands/flags.py @@ -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` @@ -97,6 +99,7 @@ class Flag: """ 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,9 @@ 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]):