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.
This commit is contained in:
Rapptz
2018-09-24 21:05:41 -04:00
parent 12cb074316
commit 3d03dbc451
9 changed files with 61 additions and 46 deletions

View File

@ -71,7 +71,7 @@ def _transform_overwrites(entry, data):
ow_type = elem['type']
ow_id = int(elem['id'])
if ow_type == 'role':
target = utils.find(lambda r: r.id == ow_id, entry.guild.roles)
target = entry.guild.get_role(ow_id)
else:
target = entry._get_member(ow_id)
@ -163,11 +163,11 @@ class AuditLogChanges:
setattr(first, 'roles', [])
data = []
roles = entry.guild.roles
g = entry.guild
for e in elem:
role_id = int(e['id'])
role = utils.find(lambda r: r.id == role_id, roles)
role = g.get_role(role_id)
if role is None:
role = Object(id=role_id)
@ -235,7 +235,7 @@ class AuditLogEntry:
if the_type == 'member':
self.extra = self._get_member(instance_id)
else:
role = utils.find(lambda r: r.id == instance_id, self.guild.roles)
role = self.guild.get_role(instance_id)
if role is None:
role = Object(id=instance_id)
role.name = self.extra.get('role_name')
@ -306,7 +306,7 @@ class AuditLogEntry:
return self._get_member(target_id)
def _convert_target_role(self, target_id):
role = utils.find(lambda r: r.id == target_id, self.guild.roles)
role = self.guild.get_role(target_id)
if role is None:
return Object(id=target_id)
return role