diff options
| author | z03h <[email protected]> | 2021-07-20 23:51:46 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-07-21 02:51:46 -0400 |
| commit | dd5fc656d93f5d04ab164c05ca3d3dc700bf81c9 (patch) | |
| tree | 80b002f8a0c720b14690b8e0a57aead84ecb27be | |
| parent | [commands] Remove unused copy import in Cog (diff) | |
| download | discord.py-dd5fc656d93f5d04ab164c05ca3d3dc700bf81c9.tar.xz discord.py-dd5fc656d93f5d04ab164c05ca3d3dc700bf81c9.zip | |
Fix permissions_for for roles
| -rw-r--r-- | discord/abc.py | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/discord/abc.py b/discord/abc.py index bd1d67ee..e6bb0f5a 100644 --- a/discord/abc.py +++ b/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 |