From 3d03dbc45179f645b59838729047e896cc387049 Mon Sep 17 00:00:00 2001 From: Rapptz Date: Mon, 24 Sep 2018 21:05:41 -0400 Subject: Change internal role storage in Guild to a dict instead of a list. This adds the following APIs: * Guild.get_role This removes the following APIs: * Guild.role_hierarchy To compensate for the removed APIs, Guild.roles is now a sorted list based on hierarchy. The first element will always be the @everyone role. This speeds up access at the cost of some memory, theoretically. --- discord/ext/commands/converter.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'discord/ext') diff --git a/discord/ext/commands/converter.py b/discord/ext/commands/converter.py index 461abee7..c9e91211 100644 --- a/discord/ext/commands/converter.py +++ b/discord/ext/commands/converter.py @@ -320,8 +320,11 @@ class RoleConverter(IDConverter): raise NoPrivateMessage() match = self._get_id_match(argument) or re.match(r'<@&([0-9]+)>$', argument) - params = dict(id=int(match.group(1))) if match else dict(name=argument) - result = discord.utils.get(guild.roles, **params) + if match: + result = guild.get_role(int(match.group(1))) + else: + result = discord.utils.get(guild._roles.values(), name=argument) + if result is None: raise BadArgument('Role "{}" not found.'.format(argument)) return result @@ -454,8 +457,8 @@ class clean_content(Converter): ) if ctx.guild: - def resolve_role(id, *, _find=discord.utils.find, _roles=ctx.guild.roles): - r = _find(lambda x: x.id == id, _roles) + def resolve_role(_id, *, _find=ctx.guild.get_role): + r = _find(_id, _roles) return '@' + r.name if r else '@deleted-role' transformations.update( -- cgit v1.2.3