diff options
| author | jack1142 <[email protected]> | 2020-06-28 09:48:07 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2020-06-28 03:48:07 -0400 |
| commit | 84098ed82445bdaebc6636800644a01c52644f60 (patch) | |
| tree | 93afde0094cf219c80a3bc4ab1c9b403b1715d99 /discord | |
| parent | Fix various inconsistencies within the documentation (#5067) (diff) | |
| download | discord.py-84098ed82445bdaebc6636800644a01c52644f60.tar.xz discord.py-84098ed82445bdaebc6636800644a01c52644f60.zip | |
[commands] Add a new exception class for command registration errors
Diffstat (limited to 'discord')
| -rw-r--r-- | discord/ext/commands/core.py | 11 | ||||
| -rw-r--r-- | discord/ext/commands/errors.py | 24 |
2 files changed, 30 insertions, 5 deletions
diff --git a/discord/ext/commands/core.py b/discord/ext/commands/core.py index 7bfe6196..6af99622 100644 --- a/discord/ext/commands/core.py +++ b/discord/ext/commands/core.py @@ -1080,6 +1080,9 @@ class GroupMixin: This is usually not called, instead the :meth:`~.GroupMixin.command` or :meth:`~.GroupMixin.group` shortcut decorators are used instead. + .. versionchanged:: 1.4 + Raise :exc:`.CommandRegistrationError` instead of generic :exc:`.ClientException` + Parameters ----------- command: :class:`Command` @@ -1087,8 +1090,8 @@ class GroupMixin: Raises ------- - :exc:`.ClientException` - If the command is already registered. + :exc:`.CommandRegistrationError` + If the command or its alias is already registered by different command. TypeError If the command passed is not a subclass of :class:`.Command`. """ @@ -1100,12 +1103,12 @@ class GroupMixin: command.parent = self if command.name in self.all_commands: - raise discord.ClientException('Command {0.name} is already registered.'.format(command)) + raise CommandRegistrationError(command.name) self.all_commands[command.name] = command for alias in command.aliases: if alias in self.all_commands: - raise discord.ClientException('The alias {} is already an existing command or alias.'.format(alias)) + raise CommandRegistrationError(alias, alias_conflict=True) self.all_commands[alias] = command def remove_command(self, name): diff --git a/discord/ext/commands/errors.py b/discord/ext/commands/errors.py index 34b0b979..a1b3b262 100644 --- a/discord/ext/commands/errors.py +++ b/discord/ext/commands/errors.py @@ -24,7 +24,7 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ -from discord.errors import DiscordException +from discord.errors import ClientException, DiscordException __all__ = ( @@ -62,6 +62,7 @@ __all__ = ( 'NoEntryPointError', 'ExtensionFailed', 'ExtensionNotFound', + 'CommandRegistrationError', ) class CommandError(DiscordException): @@ -583,3 +584,24 @@ class ExtensionNotFound(ExtensionError): self.original = None fmt = 'Extension {0!r} could not be loaded.' super().__init__(fmt.format(name), name=name) + +class CommandRegistrationError(ClientException): + """An exception raised when the command can't be added + because the name is already taken by a different command. + + This inherits from :exc:`discord.ClientException` + + .. versionadded:: 1.4 + + Attributes + ---------- + name: :class:`str` + The command name that had the error. + alias_conflict: :class:`bool` + Whether the name that conflicts is an alias of the command we try to add. + """ + def __init__(self, name, *, alias_conflict=False): + self.name = name + self.alias_conflict = alias_conflict + type_ = 'alias' if alias_conflict else 'command' + super().__init__('The {} {} is already an existing command or alias.'.format(type_, name)) |