[commands] Fix Context.command_failed from being incorrect.

When used, it would be set to False after the invoke was done. Ideally
it should report to False during invoke but True during any error
case.
This commit is contained in:
Rapptz 2017-05-18 20:48:38 -04:00
parent 8526995004
commit c3e39cd722
3 changed files with 5 additions and 2 deletions

View File

@ -742,7 +742,6 @@ class BotBase(GroupMixin):
except CommandError as e: except CommandError as e:
yield from ctx.command.dispatch_error(ctx, e) yield from ctx.command.dispatch_error(ctx, e)
else: else:
ctx.command_failed = False
self.dispatch('command_completion', ctx) self.dispatch('command_completion', ctx)
elif ctx.invoked_with: elif ctx.invoked_with:
exc = CommandNotFound('Command "{}" is not found'.format(ctx.invoked_with)) exc = CommandNotFound('Command "{}" is not found'.format(ctx.invoked_with))

View File

@ -83,7 +83,7 @@ class Context(discord.abc.Messageable):
self.invoked_with = attrs.pop('invoked_with', None) self.invoked_with = attrs.pop('invoked_with', None)
self.invoked_subcommand = attrs.pop('invoked_subcommand', None) self.invoked_subcommand = attrs.pop('invoked_subcommand', None)
self.subcommand_passed = attrs.pop('subcommand_passed', None) self.subcommand_passed = attrs.pop('subcommand_passed', None)
self.command_failed = attrs.pop('command_failed', True) self.command_failed = attrs.pop('command_failed', False)
self._state = self.message._state self._state = self.message._state
@asyncio.coroutine @asyncio.coroutine

View File

@ -61,10 +61,13 @@ def hooked_wrapped_callback(command, ctx, coro):
try: try:
ret = yield from coro(*args, **kwargs) ret = yield from coro(*args, **kwargs)
except CommandError: except CommandError:
ctx.command_failed = True
raise raise
except asyncio.CancelledError: except asyncio.CancelledError:
ctx.command_failed = True
return return
except Exception as e: except Exception as e:
ctx.command_failed = True
raise CommandInvokeError(e) from e raise CommandInvokeError(e) from e
finally: finally:
yield from command.call_after_hooks(ctx) yield from command.call_after_hooks(ctx)
@ -165,6 +168,7 @@ class Command:
@asyncio.coroutine @asyncio.coroutine
def dispatch_error(self, ctx, error): def dispatch_error(self, ctx, error):
ctx.command_failed = True
cog = self.instance cog = self.instance
try: try:
coro = self.on_error coro = self.on_error