diff --git a/.github/labeler.yml b/.github/labeler.yml index 3eff6854081..18a23a7085d 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -141,6 +141,8 @@ "Category: Core - API - App Commands Package": # Source - redbot/core/app_commands/* + # Docs + - docs/framework_app_commands.rst # Tests - tests/core/test_app_commands.py "Category: Core - API - Commands Package": diff --git a/docs/framework_app_commands.rst b/docs/framework_app_commands.rst new file mode 100644 index 00000000000..650da9d90e4 --- /dev/null +++ b/docs/framework_app_commands.rst @@ -0,0 +1,13 @@ +.. red app_commands module documentation + +==================== +App Commands Package +==================== + +This package acts almost identically to :doc:`discord.ext.app_commands `; i.e. +all of the attributes from discord.py's are also in ours. +Some of these attributes, however, have been slightly modified, while others have been added to +extend functionalities used throughout the bot, as outlined below. + +.. autoclass:: redbot.core.app_commands.UserFeedbackCheckFailure + :members: diff --git a/docs/framework_commands.rst b/docs/framework_commands.rst index 59da090600e..fb5f41537d9 100644 --- a/docs/framework_commands.rst +++ b/docs/framework_commands.rst @@ -47,6 +47,9 @@ extend functionalities used throughout the bot, as outlined below. .. autoclass:: redbot.core.commands.DMContext +.. autoclass:: redbot.core.commands.UserFeedbackCheckFailure + :members: + .. automodule:: redbot.core.commands.requires :members: PrivilegeLevel, PermState, Requires diff --git a/docs/index.rst b/docs/index.rst index 33911469b7a..e4423f0ec30 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -71,6 +71,7 @@ Welcome to Red - Discord Bot's documentation! framework_bot framework_checks framework_commands + framework_app_commands framework_config framework_datamanager framework_events diff --git a/redbot/core/app_commands/__init__.py b/redbot/core/app_commands/__init__.py index 6369c3c2af1..45b1888fd96 100644 --- a/redbot/core/app_commands/__init__.py +++ b/redbot/core/app_commands/__init__.py @@ -69,6 +69,9 @@ ) from . import checks as checks +from .errors import ( + UserFeedbackCheckFailure as UserFeedbackCheckFailure, +) __all__ = ( "AllChannels", @@ -131,4 +134,5 @@ "rename", "user_install", "checks", + "UserFeedbackCheckFailure", ) diff --git a/redbot/core/app_commands/errors.py b/redbot/core/app_commands/errors.py new file mode 100644 index 00000000000..4003c64cb26 --- /dev/null +++ b/redbot/core/app_commands/errors.py @@ -0,0 +1,10 @@ +"""Errors module for the app_commands package.""" +from discord import app_commands + + +class UserFeedbackCheckFailure(app_commands.CheckFailure): + """A version of CheckFailure responding with a custom error message.""" + + def __init__(self, message=None, *args): + self.message = message + super().__init__(message, *args) diff --git a/redbot/core/tree.py b/redbot/core/tree.py index b2c130865be..4b32dcf8f73 100644 --- a/redbot/core/tree.py +++ b/redbot/core/tree.py @@ -17,6 +17,7 @@ Group, NoPrivateMessage, TransformerError, + UserFeedbackCheckFailure, ) from .i18n import Translator from .utils.chat_formatting import humanize_list, inline @@ -327,6 +328,9 @@ async def on_error( relative_time=relative_time ) await self._send_from_interaction(interaction, msg, delete_after=error.retry_after) + elif isinstance(error, UserFeedbackCheckFailure): + if error.message: + await self._send_from_interaction(interaction, error.message) elif isinstance(error, CheckFailure): await self._send_from_interaction( interaction, _("You are not permitted to use this command.")