From ef89d3aa227138e2589fa2eef181932ee264cc0e Mon Sep 17 00:00:00 2001 From: Bryan Forbes Date: Fri, 10 Aug 2018 16:47:42 -0500 Subject: [PATCH] Add support for converters working with PEP-563 --- discord/ext/commands/core.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/discord/ext/commands/core.py b/discord/ext/commands/core.py index a31986511..5cab60031 100644 --- a/discord/ext/commands/core.py +++ b/discord/ext/commands/core.py @@ -173,8 +173,20 @@ 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)