diff options
| author | Rapptz <[email protected]> | 2017-01-03 20:15:56 -0500 |
|---|---|---|
| committer | Rapptz <[email protected]> | 2017-01-03 20:17:58 -0500 |
| commit | c863d93f69090e0f494ffa1b6846cddc3668f779 (patch) | |
| tree | 3c0371a50be47cc222b28fdcc8e261dffc0225e9 /discord/member.py | |
| parent | [commands] Don't use removed is_private attribute in core decorators. (diff) | |
| download | discord.py-c863d93f69090e0f494ffa1b6846cddc3668f779.tar.xz discord.py-c863d93f69090e0f494ffa1b6846cddc3668f779.zip | |
Fix bug that made member roles go missing.
Diffstat (limited to 'discord/member.py')
| -rw-r--r-- | discord/member.py | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/discord/member.py b/discord/member.py index 3d9928dc..467bdbbe 100644 --- a/discord/member.py +++ b/discord/member.py @@ -145,12 +145,12 @@ class Member(discord.abc.Messageable): def __init__(self, *, data, guild, state): self._state = state self._user = state.store_user(data['user']) + self.guild = guild self.joined_at = utils.parse_time(data.get('joined_at')) - self.roles = data.get('roles', []) + self._update_roles(data) self.status = Status.offline game = data.get('game', {}) self.game = Game(**game) if game else None - self.guild = guild self.nick = data.get('nick', None) def __str__(self): @@ -177,6 +177,22 @@ class Member(discord.abc.Messageable): def _get_guild_id(self): return None + def _update_roles(self, data): + # update the roles + self.roles = [self.guild.default_role] + for role in self.guild.roles: + if role.id in data['roles']: + self.roles.append(role) + + self.roles = [self.guild.default_role] + for roleid in map(int, data['roles']): + role = utils.find(lambda r: r.id == roleid, self.guild.roles) + if role is not None: + self.roles.append(role) + + # sort the roles by ID since they can be "randomised" + self.roles.sort(key=lambda r: r.id) + def _update(self, data, user=None): if user: self._user.name = user['username'] @@ -191,14 +207,7 @@ class Member(discord.abc.Messageable): except KeyError: pass - # update the roles - self.roles = [self.guild.default_role] - for role in self.guild.roles: - if role.id in data['roles']: - self.roles.append(role) - - # sort the roles by ID since they can be "randomised" - self.roles.sort(key=lambda r: int(r.id)) + self._update_roles(data) def _presence_update(self, data, user): self.status = try_enum(Status, data['status']) |