From e8d273cf8cb158f11bbe9e709cce045f52e83101 Mon Sep 17 00:00:00 2001 From: Rapptz Date: Tue, 29 Aug 2017 22:37:57 -0400 Subject: [PATCH] Sort roles by hierarchy rather than by ID. --- discord/member.py | 21 +++++++-------------- discord/state.py | 4 ++-- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/discord/member.py b/discord/member.py index 50ad184a7..c23b46c57 100644 --- a/discord/member.py +++ b/discord/member.py @@ -155,19 +155,15 @@ class Member(User): There is an alias for this under ``color``. """ - default_colour = Colour.default() + roles = self.roles[1:] # remove @everyone + # highest order of the colour is the one that gets rendered. # if the highest is the default colour then the next one with a colour # is chosen instead - if self.roles: - roles = sorted(self.roles, key=lambda r: r.position, reverse=True) - for role in roles: - if role.colour == default_colour: - continue - else: - return role.colour - - return default_colour + for role in reversed(roles): + if role.colour.value: + return role.colour + return Colour.default() color = colour @@ -197,10 +193,7 @@ class Member(User): hierarchy chain. """ - if self.roles: - roles = sorted(self.roles, reverse=True) - return roles[0] - return None + return self.roles[-1] @property def server_permissions(self): diff --git a/discord/state.py b/discord/state.py index 87564ab43..b872041ee 100644 --- a/discord/state.py +++ b/discord/state.py @@ -410,7 +410,7 @@ class ConnectionState: if role is not None: roles.append(role) - data['roles'] = sorted(roles, key=lambda r: int(r.id)) + data['roles'] = sorted(roles) return Member(server=server, **data) def parse_guild_member_add(self, data): @@ -463,7 +463,7 @@ class ConnectionState: member.roles.append(role) # sort the roles by ID since they can be "randomised" - member.roles.sort(key=lambda r: int(r.id)) + member.roles.sort() self.dispatch('member_update', old_member, member) def parse_guild_emojis_update(self, data):