aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--discord/ext/commands/core.py33
1 files changed, 19 insertions, 14 deletions
diff --git a/discord/ext/commands/core.py b/discord/ext/commands/core.py
index 5cab6003..22882f4e 100644
--- a/discord/ext/commands/core.py
+++ b/discord/ext/commands/core.py
@@ -174,21 +174,7 @@ class Command:
self.description = inspect.cleandoc(kwargs.get('description', ''))
self.hidden = kwargs.get('hidden', False)
- signature = inspect.signature(callback)
- annotations = typing.get_type_hints(callback)
-
- self.params = signature.parameters.copy()
-
- # PEP-563 allows postponing evaluation of annotations with a __future__
- # import. When postponed, Parameter.annotation will be a string and must
- # be replaced with the real class from typing.get_type_hints() for the
- # converters to work later on
- for key, value in self.params.items():
- if isinstance(value.annotation, str) and key in annotations:
- self.params[key] = value.replace(annotation=annotations[key])
-
self.checks = kwargs.get('checks', [])
- self.module = callback.__module__
self.ignore_extra = kwargs.get('ignore_extra', True)
self.instance = None
self.parent = None
@@ -196,6 +182,25 @@ class Command:
self._before_invoke = None
self._after_invoke = None
+ @property
+ def callback(self):
+ return self._callback
+
+ @callback.setter
+ def callback(self, function):
+ self._callback = function
+ self.module = function.__module__
+
+ signature = inspect.signature(function)
+ self.params = signature.parameters.copy()
+
+ # PEP-563 allows postponing evaluation of annotations with a __future__
+ # import. When postponed, Parameter.annotation will be a string and must
+ # be replaced with the real value for the converters to work later on
+ for key, value in self.params.items():
+ if isinstance(value.annotation, str):
+ self.params[key] = value.replace(annotation=eval(value.annotation, function.__globals__))
+
async def dispatch_error(self, ctx, error):
ctx.command_failed = True
cog = self.instance