[commands] Add a new exception class for command registration errors
This commit is contained in:
parent
b4b953bfc6
commit
84098ed824
@ -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,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))
|
||||||
|
@ -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…
x
Reference in New Issue
Block a user