Browse Source

Fix permissions_for for roles

pull/7269/head
z03h 4 years ago
committed by GitHub
parent
commit
dd5fc656d9
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 31
      discord/abc.py

31
discord/abc.py

@ -544,6 +544,7 @@ class GuildChannel:
someone with that role would have, which is essentially:
- The default role permissions
- The permissions of the role used as a parameter
- The default role permission overwrites
- The permission overwrites of the role used as a parameter
@ -585,24 +586,26 @@ class GuildChannel:
# Handle the role case first
if isinstance(obj, Role):
base.value |= obj._permissions
if base.administrator:
return Permissions.all()
# Apply @everyone allow/deny first since it's special
try:
maybe_everyone = self._overwrites[0]
if maybe_everyone.id == self.guild.id:
base.handle_overwrite(allow=maybe_everyone.allow, deny=maybe_everyone.deny)
except IndexError:
pass
if obj.is_default():
overwrite = utils.get(self._overwrites, type=_Overwrites.ROLE, id=obj.id)
if overwrite is not None:
base.handle_overwrite(overwrite.allow, overwrite.deny)
return base
denies = 0
allows = 0
guild_id = self.guild.id
for overwrite in self._overwrites:
if not overwrite.is_role():
continue
if overwrite.id in (obj.id, guild_id):
denies |= overwrite.deny
allows |= overwrite.allow
overwrite = utils.get(self._overwrites, type=_Overwrites.ROLE, id=obj.id)
if overwrite is not None:
base.handle_overwrite(overwrite.allow, overwrite.deny)
base.handle_overwrite(allows, denies)
return base
roles = obj._roles

Loading…
Cancel
Save