aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRapptz <[email protected]>2019-02-24 00:24:31 -0500
committerRapptz <[email protected]>2019-02-24 00:24:31 -0500
commitd5d91648105b1617f3387b5563e88cca9173b882 (patch)
tree7e43821d0ab0ae4306c01650f42ff45265b4e729
parent[commands] Remove Bot.get_cog_commands (diff)
downloaddiscord.py-d5d91648105b1617f3387b5563e88cca9173b882.tar.xz
discord.py-d5d91648105b1617f3387b5563e88cca9173b882.zip
[commands] Fix special method detection for regular function objects.
Fixes #1920
-rw-r--r--discord/ext/commands/cog.py15
1 files changed, 12 insertions, 3 deletions
diff --git a/discord/ext/commands/cog.py b/discord/ext/commands/cog.py
index 3f07dd6b..4c4b8eef 100644
--- a/discord/ext/commands/cog.py
+++ b/discord/ext/commands/cog.py
@@ -115,6 +115,10 @@ class CogMeta(type):
def qualified_name(cls):
return cls.__cog_name__
+def _cog_special_method(func):
+ func.__cog_special_method__ = None
+ return func
+
class Cog(metaclass=CogMeta):
"""The base class that all cogs must inherit from.
@@ -181,9 +185,7 @@ class Cog(metaclass=CogMeta):
@classmethod
def _get_overridden_method(cls, method):
"""Return None if the method is not overridden. Otherwise returns the overridden method."""
- if method.__func__ is getattr(cls, method.__name__):
- return None
- return method
+ return getattr(method.__func__, '__cog_special_method__', method)
@classmethod
def listener(cls, name=None):
@@ -211,6 +213,7 @@ class Cog(metaclass=CogMeta):
return func
return decorator
+ @_cog_special_method
def cog_unload(self):
"""A special method that is called when the cog gets removed.
@@ -221,6 +224,7 @@ class Cog(metaclass=CogMeta):
"""
pass
+ @_cog_special_method
def bot_check_once(self, ctx):
"""A special method that registers as a :meth:`.Bot.check_once`
check.
@@ -230,6 +234,7 @@ class Cog(metaclass=CogMeta):
"""
return True
+ @_cog_special_method
def bot_check(self, ctx):
"""A special method that registers as a :meth:`.Bot.check`
check.
@@ -239,6 +244,7 @@ class Cog(metaclass=CogMeta):
"""
return True
+ @_cog_special_method
def cog_check(self, ctx):
"""A special method that registers as a :func:`commands.check`
for every command and subcommand in this cog.
@@ -248,6 +254,7 @@ class Cog(metaclass=CogMeta):
"""
return True
+ @_cog_special_method
def cog_command_error(self, ctx, error):
"""A special method that is called whenever an error
is dispatched inside this cog.
@@ -266,6 +273,7 @@ class Cog(metaclass=CogMeta):
"""
pass
+ @_cog_special_method
async def cog_before_invoke(self, ctx):
"""A special method that acts as a cog local pre-invoke hook.
@@ -280,6 +288,7 @@ class Cog(metaclass=CogMeta):
"""
pass
+ @_cog_special_method
async def cog_after_invoke(self, ctx):
"""A special method that acts as a cog local post-invoke hook.