diff --git a/redbot/core/utils/mod.py b/redbot/core/utils/mod.py index 25a81f54a..aa3ab50e5 100644 --- a/redbot/core/utils/mod.py +++ b/redbot/core/utils/mod.py @@ -135,16 +135,10 @@ async def is_mod_or_superior(bot: Red, obj: Union[discord.Message, discord.Membe if isinstance(obj, discord.Role): return obj.id in [admin_role_id, mod_role_id] - mod_roles = [r for r in server.roles if r.id == mod_role_id] - mod_role = mod_roles[0] if len(mod_roles) > 0 else None - admin_roles = [r for r in server.roles if r.id == admin_role_id] - admin_role = admin_roles[0] if len(admin_roles) > 0 else None - if user and user == await bot.is_owner(user): + if await bot.is_owner(user): return True - elif admin_role and discord.utils.get(user.roles, name=admin_role): - return True - elif mod_role and discord.utils.get(user.roles, name=mod_role): + elif discord.utils.find(lambda r: r.id in (admin_role_id, mod_role_id), user.roles): return True else: return False @@ -220,17 +214,14 @@ async def is_admin_or_superior( else: raise TypeError("Only messages, members or roles may be passed") - server = obj.guild - admin_role_id = await bot.db.guild(server).admin_role() + admin_role_id = await bot.db.guild(obj.guild).admin_role() if isinstance(obj, discord.Role): return obj.id == admin_role_id - admin_roles = [r for r in server.roles if r.id == admin_role_id] - admin_role = admin_roles[0] if len(admin_roles) > 0 else None if user and await bot.is_owner(user): return True - elif admin_roles and discord.utils.get(user.roles, name=admin_role): + elif discord.utils.get(user.roles, id=admin_role_id): return True else: return False