aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--discord/ext/commands/bot.py22
-rw-r--r--discord/ext/commands/core.py1
-rw-r--r--discord/ext/commands/errors.py10
3 files changed, 22 insertions, 11 deletions
diff --git a/discord/ext/commands/bot.py b/discord/ext/commands/bot.py
index a788f670..35b1d149 100644
--- a/discord/ext/commands/bot.py
+++ b/discord/ext/commands/bot.py
@@ -31,6 +31,7 @@ import inspect
from .core import GroupMixin
from .view import StringView
from .context import Context
+from .errors import CommandNotFound
class Bot(GroupMixin, discord.Client):
"""Represents a discord bot.
@@ -203,18 +204,21 @@ class Bot(GroupMixin, discord.Client):
view.skip_ws()
invoker = view.get_word()
+ tmp = {
+ 'bot': self,
+ 'invoked_with': invoker,
+ 'message': message,
+ 'view': view,
+ }
+ ctx = Context(**tmp)
+ del tmp
if invoker in self.commands:
command = self.commands[invoker]
- tmp = {
- 'bot': self,
- 'invoked_with': invoker,
- 'message': message,
- 'view': view,
- 'command': command
- }
- ctx = Context(**tmp)
- del tmp
+ ctx.command = command
yield from command.invoke(ctx)
+ else:
+ exc = CommandNotFound('Command "{}" is not found'.format(invoker))
+ self.dispatch('command_error', exc, ctx)
@asyncio.coroutine
def on_message(self, message):
diff --git a/discord/ext/commands/core.py b/discord/ext/commands/core.py
index 9035cf33..92ff64ab 100644
--- a/discord/ext/commands/core.py
+++ b/discord/ext/commands/core.py
@@ -334,7 +334,6 @@ class Group(GroupMixin, Command):
if ctx.invoked_subcommand:
yield from ctx.invoked_subcommand.invoke(ctx)
-
# Decorators
def command(name=None, cls=None, **attrs):
diff --git a/discord/ext/commands/errors.py b/discord/ext/commands/errors.py
index 01bd5035..9ffb6bd4 100644
--- a/discord/ext/commands/errors.py
+++ b/discord/ext/commands/errors.py
@@ -27,7 +27,7 @@ from discord.errors import DiscordException
__all__ = [ 'CommandError', 'MissingRequiredArgument', 'BadArgument',
- 'NoPrivateMessage', 'CheckFailure' ]
+ 'NoPrivateMessage', 'CheckFailure', 'CommandNotFound' ]
class CommandError(DiscordException):
"""The base exception type for all command related errors.
@@ -40,6 +40,14 @@ class CommandError(DiscordException):
"""
pass
+class CommandNotFound(CommandError):
+ """Exception raised when a command is attempted to be invoked
+ but no command under that name is found.
+
+ This is not raised for invalid subcommands, rather just the
+ initial main command that is attempted to be invoked.
+ """
+
class MissingRequiredArgument(CommandError):
"""Exception raised when parsing a command and a parameter
that is required is not encountered.