from core import PluginDataManager from core.bot import Bot from core.command_manager import matcher from models import GroupMessageEvent __plugin_meta__ = { "name": "admin", "description": "机器人权限管理插件", "usage": "/admin", } data = PluginDataManager("admin") @matcher.command("admin") async def handle_permission(bot: Bot, event: GroupMessageEvent, args: list[str]): if not args: await event.reply( "机器人权限管理插件指令:\n/admin list 列出所有权限\n/admin add member 添加群成员权限\n/admin remove member 删除群成员权限\n/admin add group <群号> 添加群权限\n/admin remove group <群号> 删除群权限\n/admin clear member 清空群成员权限\n/admin clear group 清空群权限\n/admin clear all 清空所有权限" ) return if str(event.user_id) not in data.get("members", []): await event.reply("你没有权限使用此命令。") return if str(event.group_id) not in data.get("groups", []): await event.reply("群聊不在权限中") return action = args[0].lower() # ensure storage keys exist members = data.get("members", []) or [] groups = data.get("groups", []) or [] if action == "list": msg_lines = ["当前权限列表:"] msg_lines.append( f"群成员权限 ({len(members)}): {', '.join(members) if members else '无'}" ) msg_lines.append( f"群权限 ({len(groups)}): {', '.join(groups) if groups else '无'}" ) await event.reply("\n".join(msg_lines)) return if action in ("add", "remove"): if len(args) < 3: await event.reply("参数错误,示例:/admin add member 123456") return target = args[1].lower() value = args[2] if target == "member": # operate on members list if action == "add": if str(value) in members: await event.reply(f"成员 {value} 已存在,无需重复添加。") return members.append(str(value)) data.set("members", members) await event.reply(f"已添加群成员权限:{value}") return else: # remove if str(value) not in members: await event.reply(f"成员 {value} 不在权限列表中。") return members = [m for m in members if m != str(value)] data.set("members", members) await event.reply(f"已移除群成员权限:{value}") return if target == "group": if action == "add": if str(value) in groups: await event.reply(f"群 {value} 已存在,无需重复添加。") return groups.append(str(value)) data.set("groups", groups) await event.reply(f"已添加群权限:{value}") return else: # remove if str(value) not in groups: await event.reply(f"群 {value} 不在权限列表中。") return groups = [g for g in groups if g != str(value)] data.set("groups", groups) await event.reply(f"已移除群权限:{value}") return await event.reply("未知目标类型,请使用 member 或 group") return if action == "clear": if len(args) < 2: await event.reply("参数错误,示例:/admin clear member") return target = args[1].lower() if target == "member": data.set("members", []) await event.reply("已清空群成员权限。") return if target == "group": data.set("groups", []) await event.reply("已清空群权限。") return if target == "all": data.clear() await event.reply("已清空所有权限。") return await event.reply("未知清空目标,请使用 member/group/all") return await event.reply("未知指令,使用 /admin 查看帮助")