[commands] Guarantee that local error handler is called before generic.

This commit is contained in:
Rapptz 2017-01-15 21:55:50 -05:00
parent 11b54d67c9
commit ea72d5e63d
2 changed files with 4 additions and 4 deletions

View File

@ -632,7 +632,7 @@ class BotBase(GroupMixin):
try:
yield from ctx.command.invoke(ctx)
except CommandError as e:
ctx.command.dispatch_error(e, ctx)
yield from ctx.command.dispatch_error(e, ctx)
else:
self.dispatch('command_completion', ctx)
elif ctx.invoked_with:

View File

@ -145,18 +145,18 @@ class Command:
self.parent = None
self._buckets = CooldownMapping(kwargs.get('cooldown'))
@asyncio.coroutine
def dispatch_error(self, error, ctx):
try:
coro = self.on_error
except AttributeError:
pass
else:
loop = ctx.bot.loop
injected = wrap_callback(coro)
if self.instance is not None:
discord.compat.create_task(injected(self.instance, error, ctx), loop=loop)
yield from injected(self.instance, error, ctx)
else:
discord.compat.create_task(injected(error, ctx), loop=loop)
yield from injected(error, ctx)
finally:
ctx.bot.dispatch('command_error', error, ctx)