From cca0e9fe6d3a04b258719e92adf7566f47a88bb5 Mon Sep 17 00:00:00 2001 From: Kyomotoi <0w0@imki.moe> Date: Fri, 4 Nov 2022 08:33:50 +0800 Subject: =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20=E5=AE=8C=E5=96=84=E6=9D=83?= =?UTF-8?q?=E9=99=90=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ATRI/permission.py | 56 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file 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 -- cgit v1.2.3