From 7a5ada2d920f43e77df806969225a052a0f7fba3 Mon Sep 17 00:00:00 2001 From: jack1142 <6032823+jack1142@users.noreply.github.com> Date: Mon, 21 Mar 2022 17:23:23 +0100 Subject: [PATCH] Make decorator combining in Requires more consistent (#5625) * Allow combining bot_has_permissions() decos * Improve consistency for Requires.user_perms --- redbot/core/commands/requires.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/redbot/core/commands/requires.py b/redbot/core/commands/requires.py index 980ead9b1..3597f72c4 100644 --- a/redbot/core/commands/requires.py +++ b/redbot/core/commands/requires.py @@ -361,14 +361,20 @@ class Requires: def decorator(func: "_CommandOrCoro") -> "_CommandOrCoro": if inspect.iscoroutinefunction(func): func.__requires_privilege_level__ = privilege_level - func.__requires_user_perms__ = user_perms + if user_perms is None: + func.__requires_user_perms__ = None + else: + if getattr(func, "__requires_user_perms__", None) is None: + func.__requires_user_perms__ = discord.Permissions.none() + func.__requires_user_perms__.update(**user_perms) else: func.requires.privilege_level = privilege_level if user_perms is None: func.requires.user_perms = None else: _validate_perms_dict(user_perms) - assert func.requires.user_perms is not None + if func.requires.user_perms is None: + func.requires.user_perms = discord.Permissions.none() func.requires.user_perms.update(**user_perms) return func @@ -705,7 +711,10 @@ def bot_has_permissions(**perms: bool): def decorator(func: "_CommandOrCoro") -> "_CommandOrCoro": if asyncio.iscoroutinefunction(func): - func.__requires_bot_perms__ = perms + if not hasattr(func, "__requires_bot_perms__"): + func.__requires_bot_perms__ = discord.Permissions.none() + _validate_perms_dict(perms) + func.__requires_bot_perms__.update(**perms) else: _validate_perms_dict(perms) func.requires.bot_perms.update(**perms)