diff --git a/discord/ext/commands/converter.py b/discord/ext/commands/converter.py index 7e54241fa..4284fa59a 100644 --- a/discord/ext/commands/converter.py +++ b/discord/ext/commands/converter.py @@ -101,7 +101,33 @@ class MemberConverter(IDConverter): return result -UserConverter = MemberConverter +class UserConverter(IDConverter): + def convert(self): + match = self._get_id_match() or re.match(r'<@!?([0-9]+)>$', self.argument) + result = None + state = self.ctx._state + + if match is not None: + user_id = int(match.group(1)) + result = self.bot.get_user(user_id) + else: + arg = self.argument + # check for discriminator if it exists + if len(arg) > 5 and arg[-5] == '#': + discrim = arg[-4:] + name = arg[:-5] + predicate = lambda u: u.name == name and u.discriminator == discrim + result = discord.utils.find(predicate, state._users.values()) + if result is not None: + return result + + predicate = lambda u: u.name == arg + result = discord.utils.find(predicate, state._users.values()) + + if result is None: + raise BadArgument('User "{}" not found'.format(self.argument)) + + return result class TextChannelConverter(IDConverter): def convert(self):