summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ATRI/permission.py56
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