feat: 整合开发历史
This commit is contained in:
147
plugins/admin.py
147
plugins/admin.py
@@ -1,115 +1,74 @@
|
||||
from core import PluginDataManager
|
||||
"""
|
||||
管理员管理插件
|
||||
|
||||
提供通过聊天指令动态添加或移除机器人管理员的功能。
|
||||
"""
|
||||
from core.bot import Bot
|
||||
from core.command_manager import matcher
|
||||
from models import GroupMessageEvent
|
||||
from core.admin_manager import admin_manager
|
||||
from models.events.message import MessageEvent
|
||||
|
||||
__plugin_meta__ = {
|
||||
"name": "admin",
|
||||
"description": "机器人权限管理插件",
|
||||
"usage": "/admin",
|
||||
"name": "管理员管理",
|
||||
"description": "管理机器人的全局管理员",
|
||||
"usage": (
|
||||
"/admin list - 列出所有管理员\n"
|
||||
"/admin add <QQ号> - 添加管理员\n"
|
||||
"/admin remove <QQ号> - 移除管理员"
|
||||
),
|
||||
}
|
||||
|
||||
data = PluginDataManager("admin")
|
||||
|
||||
@matcher.command("admin", permission=MessageEvent.ADMIN)
|
||||
async def handle_admin_command(bot: Bot, event: MessageEvent, args: list[str]):
|
||||
"""
|
||||
处理 /admin 指令
|
||||
|
||||
@matcher.command("admin")
|
||||
async def handle_permission(bot: Bot, event: GroupMessageEvent, args: list[str]):
|
||||
:param bot: Bot 实例
|
||||
:param event: 消息事件实例
|
||||
:param args: 指令参数列表
|
||||
"""
|
||||
if not args:
|
||||
await event.reply(
|
||||
"机器人权限管理插件指令:\n/admin list 列出所有权限\n/admin add member <QQ号> 添加群成员权限\n/admin remove member <QQ号> 删除群成员权限\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("群聊不在权限中")
|
||||
await event.reply(__plugin_meta__["usage"])
|
||||
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))
|
||||
admins = await admin_manager.get_all_admins()
|
||||
if not admins:
|
||||
await event.reply("当前没有设置任何管理员。")
|
||||
return
|
||||
|
||||
admin_list_str = "\n".join(str(admin_id) for admin_id in admins)
|
||||
await event.reply(f"当前管理员列表 ({len(admins)}):\n{admin_list_str}")
|
||||
return
|
||||
|
||||
if action in ("add", "remove"):
|
||||
if len(args) < 3:
|
||||
await event.reply("参数错误,示例:/admin add member 123456")
|
||||
if len(args) < 2 or not args[1].isdigit():
|
||||
await event.reply("参数错误,请提供一个有效的 QQ 号。\n示例: /admin add 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")
|
||||
try:
|
||||
user_id = int(args[1])
|
||||
except ValueError:
|
||||
await event.reply("无效的 QQ 号,请输入纯数字。")
|
||||
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 查看帮助")
|
||||
if action == "add":
|
||||
success = await admin_manager.add_admin(user_id)
|
||||
if success:
|
||||
await event.reply(f"成功添加管理员: {user_id}")
|
||||
else:
|
||||
await event.reply(f"管理员 {user_id} 已存在,无需重复添加。")
|
||||
return
|
||||
|
||||
elif action == "remove":
|
||||
success = await admin_manager.remove_admin(user_id)
|
||||
if success:
|
||||
await event.reply(f"成功移除管理员: {user_id}")
|
||||
else:
|
||||
await event.reply(f"管理员 {user_id} 不存在。")
|
||||
return
|
||||
|
||||
await event.reply(f"未知的指令: {action}\n\n{__plugin_meta__['usage']}")
|
||||
|
||||
Reference in New Issue
Block a user