Make decorator combining in Requires more consistent (#5625)

* Allow combining bot_has_permissions() decos

* Improve consistency for Requires.user_perms
This commit is contained in:
jack1142 2022-03-21 17:23:23 +01:00 committed by GitHub
parent aa55b08a0a
commit 7a5ada2d92
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -361,14 +361,20 @@ class Requires:
def decorator(func: "_CommandOrCoro") -> "_CommandOrCoro": def decorator(func: "_CommandOrCoro") -> "_CommandOrCoro":
if inspect.iscoroutinefunction(func): if inspect.iscoroutinefunction(func):
func.__requires_privilege_level__ = privilege_level 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: else:
func.requires.privilege_level = privilege_level func.requires.privilege_level = privilege_level
if user_perms is None: if user_perms is None:
func.requires.user_perms = None func.requires.user_perms = None
else: else:
_validate_perms_dict(user_perms) _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) func.requires.user_perms.update(**user_perms)
return func return func
@ -705,7 +711,10 @@ def bot_has_permissions(**perms: bool):
def decorator(func: "_CommandOrCoro") -> "_CommandOrCoro": def decorator(func: "_CommandOrCoro") -> "_CommandOrCoro":
if asyncio.iscoroutinefunction(func): 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: else:
_validate_perms_dict(perms) _validate_perms_dict(perms)
func.requires.bot_perms.update(**perms) func.requires.bot_perms.update(**perms)