From bf11bb4b4fd145d4388dc15f70da89dd4442c244 Mon Sep 17 00:00:00 2001 From: Rapptz Date: Sun, 12 Feb 2017 15:48:18 -0500 Subject: [PATCH] [commands] Add cog local error handlers via __error. --- discord/ext/commands/core.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/discord/ext/commands/core.py b/discord/ext/commands/core.py index 4d65f0583..a688b84a6 100644 --- a/discord/ext/commands/core.py +++ b/discord/ext/commands/core.py @@ -167,16 +167,25 @@ class Command: @asyncio.coroutine def dispatch_error(self, error, ctx): + cog = self.instance try: coro = self.on_error except AttributeError: pass else: injected = wrap_callback(coro) - if self.instance is not None: - yield from injected(self.instance, error, ctx) + if cog is not None: + yield from injected(cog, error, ctx) else: yield from injected(error, ctx) + + try: + local = getattr(cog, '_{0.__class__.__name__}__error'.format(cog)) + except AttributeError: + pass + else: + wrapped = wrap_callback(local) + yield from wrapped(error, ctx) finally: ctx.bot.dispatch('command_error', error, ctx)