diff --git a/discord/channel.py b/discord/channel.py index 52f05bee1..fa5468905 100644 --- a/discord/channel.py +++ b/discord/channel.py @@ -139,7 +139,7 @@ class Channel(object): if member.id == self.server.owner.id: return Permissions.all() - default = self.server.get_default_role() + default = member.roles[0] base = deepcopy(default.permissions) # Apply server roles that the member has. @@ -155,7 +155,7 @@ class Channel(object): # Apply channel specific role permission overwrites for overwrite in self._permission_overwrites: if overwrite.type == 'role': - if overwrite.id in member_role_ids or overwrite.id == self.server.id: + if overwrite.id in member_role_ids: base.handle_overwrite(allow=overwrite.allow, deny=overwrite.deny) # Apply member specific permission overwrites diff --git a/discord/member.py b/discord/member.py index b8597e8ec..2fadc664d 100644 --- a/discord/member.py +++ b/discord/member.py @@ -56,7 +56,8 @@ class Member(User): is not currently in a voice channel. .. attribute:: roles - An array of :class:`Role` that the member belongs to. + A list of :class:`Role` that the member belongs to. Note that the first element of this + list is always the default '@everyone' role. .. attribute:: joined_at A datetime object that specifies the date and time in UTC that the member joined the server for diff --git a/discord/server.py b/discord/server.py index 6082fdf0f..f9febb2a4 100644 --- a/discord/server.py +++ b/discord/server.py @@ -94,12 +94,13 @@ class Server(object): self.unavailable = guild.get('unavailable', False) self.id = guild['id'] self.roles = [Role(everyone=(self.id == r['id']), **r) for r in guild['roles']] + default_role = self.get_default_role() self.members = [] self.owner = guild['owner_id'] for data in guild['members']: - roles = [] + roles = [default_role] for role_id in data['roles']: role = utils.find(lambda r: r.id == role_id, self.roles) if role is not None: