from typing import List from nonebot import get_plugin_config from nonebot.adapters import Event from nonebot.adapters.onebot.v11 import Bot, GroupMessageEvent, MessageEvent from pydantic import BaseModel class Config(BaseModel): # 管理员的QQ号 SUPERUSERS: List[str] = [] # 必填 pc = get_plugin_config(Config) # 权限等级(与 hoshino 的 priv 保持一致) USER = 1 GROUP_ADMIN = 2 GROUP_OWNER = 3 SUPERUSER = 999 # 管理操作所需的最低权限等级 MANAGE_PRIV = GROUP_ADMIN async def check_admin(event: Event) -> bool: return event.get_user_id() in pc.SUPERUSERS async def get_user_priv(bot: Bot, event: MessageEvent) -> int: """获取用户权限等级:超管=999 群主=3 群管理=2 普通群员=1""" if str(event.user_id) in pc.SUPERUSERS: return SUPERUSER if not isinstance(event, GroupMessageEvent): return USER try: info = await bot.get_group_member_info( group_id=event.group_id, user_id=event.user_id ) role = info.get("role") if role == "owner": return GROUP_OWNER if role == "admin": return GROUP_ADMIN except Exception: pass return USER async def check_manage(bot: Bot, event: MessageEvent) -> bool: """是否为管理及以上权限""" return await get_user_priv(bot, event) >= MANAGE_PRIV async def check_bot_admin(bot: Bot, group_id: int) -> bool: """bot 是否为该群的群管理/群主""" try: info = await bot.get_group_member_info( group_id=group_id, user_id=bot.self_id ) return info.get("role") != "member" except Exception: return False