From 928be5717f50eda267ce4055b7414c8884afda78 Mon Sep 17 00:00:00 2001 From: Michael H Date: Thu, 24 May 2018 11:17:21 -0400 Subject: [PATCH] [V3 Checks] Respect administrator and guildowner permissions (#1711) * respect admin and guildowner (implicitly) in checks for permissions * this needed it too --- redbot/cogs/mod/checks.py | 12 +++++++++--- redbot/core/checks.py | 4 +++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/redbot/cogs/mod/checks.py b/redbot/cogs/mod/checks.py index 56e1b1463..3cb1baaf5 100644 --- a/redbot/cogs/mod/checks.py +++ b/redbot/cogs/mod/checks.py @@ -19,7 +19,9 @@ def mod_or_voice_permissions(**perms): for vc in guild.voice_channels: resolved = vc.permissions_for(author) - good = all(getattr(resolved, name, None) == value for name, value in perms.items()) + good = resolved.administrator or all( + getattr(resolved, name, None) == value for name, value in perms.items() + ) if not good: return False else: @@ -40,7 +42,9 @@ def admin_or_voice_permissions(**perms): return True for vc in guild.voice_channels: resolved = vc.permissions_for(author) - good = all(getattr(resolved, name, None) == value for name, value in perms.items()) + good = resolved.administrator or all( + getattr(resolved, name, None) == value for name, value in perms.items() + ) if not good: return False else: @@ -55,7 +59,9 @@ def bot_has_voice_permissions(**perms): guild = ctx.guild for vc in guild.voice_channels: resolved = vc.permissions_for(guild.me) - good = all(getattr(resolved, name, None) == value for name, value in perms.items()) + good = resolved.administrator or all( + getattr(resolved, name, None) == value for name, value in perms.items() + ) if not good: return False else: diff --git a/redbot/core/checks.py b/redbot/core/checks.py index c33802fcc..a72249781 100644 --- a/redbot/core/checks.py +++ b/redbot/core/checks.py @@ -31,7 +31,9 @@ async def check_permissions(ctx, perms): return False resolved = ctx.channel.permissions_for(ctx.author) - return all(getattr(resolved, name, None) == value for name, value in perms.items()) + return resolved.administrator or all( + getattr(resolved, name, None) == value for name, value in perms.items() + ) async def is_mod_or_superior(ctx):