diff options
-rw-r--r-- | ATRI/permission.py | 56 |
1 files changed, 46 insertions, 10 deletions
diff --git a/ATRI/permission.py b/ATRI/permission.py index 1bd2e84..7121322 100644 --- a/ATRI/permission.py +++ b/ATRI/permission.py @@ -1,9 +1,11 @@ import json from nonebot.adapters import Bot, Event -from nonebot.permission import SUPERUSER, Permission +from nonebot.permission import Permission as _Permission from nonebot.adapters.onebot.v11 import GROUP_OWNER, GROUP_ADMIN as _GROUP_ADMIN +from nonebot.adapters.onebot.v11 import GroupMessageEvent +from ATRI import conf from ATRI.configs.config import CONFIG_PATH @@ -12,6 +14,33 @@ if not MASTER_FILE_PATH.is_file(): with open(MASTER_FILE_PATH, "w") as w: w.write(json.dumps(list())) +MASTER_LIST = set() + + +def is_master(bot: Bot, event: Event) -> bool: + global MASTER_LIST + try: + user_id = event.get_user_id() + except Exception: + return False + + data = json.loads(MASTER_FILE_PATH.read_bytes()) + MASTER_LIST = set.union(set(data), conf.BotConfig.superusers) + return True if user_id in MASTER_LIST else False + + +class Permission(_Permission): + name = str() + + def set_name(self, name: str) -> "Permission": + """为当前权限设置名称 + + Args: + name (str): 权限的名称 + """ + self.name = name + return self + class MasterList: """检查当前事件是否属于主人""" @@ -19,15 +48,22 @@ class MasterList: __slots__ = () async def __call__(self, bot: Bot, event: Event) -> bool: - try: - user_id = event.get_user_id() - except Exception: - return False + return is_master(bot, event) + - data = json.loads(MASTER_FILE_PATH.read_bytes()) - return True if user_id in data else False +class Admin: + """检查当前事件是否属于管理员""" + + __slots__ = () + + GROUP_ADMIN = ["admin", "owner"] + + async def __call__(self, bot: Bot, event: Event) -> bool: + if isinstance(event, GroupMessageEvent): + return True if event.sender.role in ["admin", "owner"] else False + else: + return is_master(bot, event) -MASTER = SUPERUSER | Permission(MasterList()) -GROUP_ADMIN = GROUP_OWNER | _GROUP_ADMIN -ADMIN = MASTER | GROUP_ADMIN +MASTER = Permission(MasterList()).set_name("Master") +ADMIN = Permission(Admin()).set_name("Admin")
\ No newline at end of file |