Browse Source

Fix Channel.permissions_for to work with the new permission system.

pull/210/head
Rapptz 9 years ago
parent
commit
9176caa355
  1. 19
      discord/channel.py

19
discord/channel.py

@ -224,34 +224,29 @@ class Channel(Hashable):
return Permissions.all() return Permissions.all()
default = self.server.default_role default = self.server.default_role
base = deepcopy(default.permissions) base = Permissions(default.permissions.value)
# Apply server roles that the member has. # Apply server roles that the member has.
for role in member.roles: for role in member.roles:
base.value |= role.permissions.value base.value |= role.permissions.value
# Server-wide Manage Roles -> True for everything # Server-wide Administrator -> True for everything
if base.manage_roles: # Bypass all channel-specific overrides
base = Permissions.all() if base.administrator:
return Permissions.all()
member_role_ids = set(map(lambda r: r.id, member.roles)) member_role_ids = set(map(lambda r: r.id, member.roles))
# Apply channel specific role permission overwrites # Apply channel specific role permission overwrites
for overwrite in self._permission_overwrites: for overwrite in self._permission_overwrites:
if overwrite.type == 'role': if overwrite.type == 'role' and overwrite.id in member_role_ids:
if overwrite.id in member_role_ids: base.handle_overwrite(allow=overwrite.allow, deny=overwrite.deny)
base.handle_overwrite(allow=overwrite.allow, deny=overwrite.deny)
# Apply member specific permission overwrites # Apply member specific permission overwrites
for overwrite in self._permission_overwrites: for overwrite in self._permission_overwrites:
if overwrite.type == 'member' and overwrite.id == member.id: if overwrite.type == 'member' and overwrite.id == member.id:
base.handle_overwrite(allow=overwrite.allow, deny=overwrite.deny) base.handle_overwrite(allow=overwrite.allow, deny=overwrite.deny)
if base.manage_roles:
# This point is essentially Channel-specific Manage Roles.
tmp = Permissions.all_channel()
base.value |= tmp.value
if self.is_default: if self.is_default:
base.read_messages = True base.read_messages = True

Loading…
Cancel
Save