Browse Source

[commands] Add a new exception class for command registration errors

pull/5079/head
jack1142 5 years ago
committed by GitHub
parent
commit
84098ed824
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 11
      discord/ext/commands/core.py
  2. 24
      discord/ext/commands/errors.py
  3. 5
      docs/ext/commands/api.rst

11
discord/ext/commands/core.py

@ -1080,6 +1080,9 @@ class GroupMixin:
This is usually not called, instead the :meth:`~.GroupMixin.command` or This is usually not called, instead the :meth:`~.GroupMixin.command` or
:meth:`~.GroupMixin.group` shortcut decorators are used instead. :meth:`~.GroupMixin.group` shortcut decorators are used instead.
.. versionchanged:: 1.4
Raise :exc:`.CommandRegistrationError` instead of generic :exc:`.ClientException`
Parameters Parameters
----------- -----------
command: :class:`Command` command: :class:`Command`
@ -1087,8 +1090,8 @@ class GroupMixin:
Raises Raises
------- -------
:exc:`.ClientException` :exc:`.CommandRegistrationError`
If the command is already registered. If the command or its alias is already registered by different command.
TypeError TypeError
If the command passed is not a subclass of :class:`.Command`. If the command passed is not a subclass of :class:`.Command`.
""" """
@ -1100,12 +1103,12 @@ class GroupMixin:
command.parent = self command.parent = self
if command.name in self.all_commands: 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 self.all_commands[command.name] = command
for alias in command.aliases: for alias in command.aliases:
if alias in self.all_commands: 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 self.all_commands[alias] = command
def remove_command(self, name): def remove_command(self, name):

24
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. DEALINGS IN THE SOFTWARE.
""" """
from discord.errors import DiscordException from discord.errors import ClientException, DiscordException
__all__ = ( __all__ = (
@ -62,6 +62,7 @@ __all__ = (
'NoEntryPointError', 'NoEntryPointError',
'ExtensionFailed', 'ExtensionFailed',
'ExtensionNotFound', 'ExtensionNotFound',
'CommandRegistrationError',
) )
class CommandError(DiscordException): class CommandError(DiscordException):
@ -583,3 +584,24 @@ class ExtensionNotFound(ExtensionError):
self.original = None self.original = None
fmt = 'Extension {0!r} could not be loaded.' fmt = 'Extension {0!r} could not be loaded.'
super().__init__(fmt.format(name), name=name) 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))

5
docs/ext/commands/api.rst

@ -377,6 +377,9 @@ Exceptions
.. autoexception:: discord.ext.commands.ExtensionNotFound .. autoexception:: discord.ext.commands.ExtensionNotFound
:members: :members:
.. autoexception:: discord.ext.commands.CommandRegistrationError
:members:
Exception Hierarchy Exception Hierarchy
+++++++++++++++++++++ +++++++++++++++++++++
@ -418,3 +421,5 @@ Exception Hierarchy
- :exc:`~.commands.NoEntryPointError` - :exc:`~.commands.NoEntryPointError`
- :exc:`~.commands.ExtensionFailed` - :exc:`~.commands.ExtensionFailed`
- :exc:`~.commands.ExtensionNotFound` - :exc:`~.commands.ExtensionNotFound`
- :exc:`~.ClientException`
- :exc:`~.commands.CommandRegistrationError`

Loading…
Cancel
Save