加入菜单设置功能
This commit is contained in:
@@ -5,4 +5,16 @@ command-format = """
|
||||
📝功能菜单指令:
|
||||
菜单 - 显示功能菜单
|
||||
菜单 状态 - 显示功能状态
|
||||
菜单 群列表 - 显示所有启用机器人的群组
|
||||
|
||||
🔧管理员指令(需要管理员权限):
|
||||
菜单 启用 序号 - 启用指定功能
|
||||
菜单 关闭 序号 - 关闭指定功能
|
||||
菜单 启用 功能名 - 启用指定功能
|
||||
菜单 关闭 功能名 - 关闭指定功能
|
||||
|
||||
示例:
|
||||
菜单 启用 1 - 启用群机器人(总开关)
|
||||
菜单 关闭 2 - 关闭每日新闻播报
|
||||
菜单 启用 PDF_CAPABILITY - 启用PDF能力
|
||||
"""
|
||||
|
||||
@@ -160,32 +160,100 @@ class RobotMenuPlugin(MessagePluginInterface):
|
||||
bot: WechatAPIClient = message.get("bot")
|
||||
revoke: MessageAutoRevoke = message.get("revoke")
|
||||
|
||||
if not bot:
|
||||
self.LOG.error("WechatAPIClient 未初始化")
|
||||
return False, "Bot 未初始化"
|
||||
|
||||
# 检查权限
|
||||
if roomid and gbm.get_group_permission(roomid, self.feature) == PermissionStatus.DISABLED:
|
||||
return False, "没有权限"
|
||||
|
||||
target = roomid if roomid else sender
|
||||
|
||||
# 检查命令格式
|
||||
if len(content.split(" ")) == 1:
|
||||
parts = content.split()
|
||||
if len(parts) == 1:
|
||||
# 显示功能菜单
|
||||
menu_text = self.get_enabled_features(roomid if roomid else sender)
|
||||
|
||||
client_msg_id, create_time, new_msg_id = await bot.send_text_message((roomid if roomid else sender),
|
||||
menu_text, sender)
|
||||
revoke.add_message_to_revoke((roomid if roomid else sender), client_msg_id, create_time, new_msg_id, 90)
|
||||
client_msg_id, create_time, new_msg_id = await bot.send_text_message(target, menu_text, sender)
|
||||
revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 90)
|
||||
return True, "显示功能菜单"
|
||||
|
||||
# 提取命令名
|
||||
cmd_name = content[len(command):].strip()
|
||||
|
||||
try:
|
||||
# 处理特殊命令
|
||||
if cmd_name.upper() == "状态":
|
||||
# 显示所有功能状态
|
||||
status_text = self.display_menu_status(roomid if roomid else sender)
|
||||
client_msg_id, create_time, new_msg_id = await bot.send_text_message((roomid if roomid else sender),
|
||||
status_text, sender)
|
||||
revoke.add_message_to_revoke((roomid if roomid else sender), client_msg_id, create_time, new_msg_id, 90)
|
||||
client_msg_id, create_time, new_msg_id = await bot.send_text_message(target, status_text, sender)
|
||||
revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 90)
|
||||
return True, "显示功能状态"
|
||||
|
||||
# 处理群列表命令
|
||||
if cmd_name.upper() == "群列表":
|
||||
group_list_text = self.get_group_list()
|
||||
client_msg_id, create_time, new_msg_id = await bot.send_text_message(target, group_list_text, sender)
|
||||
revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 90)
|
||||
return True, "显示群列表"
|
||||
|
||||
# 处理功能启用/关闭命令
|
||||
# 格式:菜单 启用 功能名 或 菜单 关闭 功能名
|
||||
if len(parts) >= 3 and parts[1] in ["启用", "关闭"]:
|
||||
# 检查管理员权限
|
||||
if not self._is_admin(sender, gbm):
|
||||
await bot.send_at_message(target, "❌权限不足,只有管理员可以管理功能", [sender])
|
||||
return True, "权限不足"
|
||||
|
||||
action = parts[1]
|
||||
feature_identifier = " ".join(parts[2:]) # 支持带空格的功能名
|
||||
|
||||
# 构造命令字符串,调用 GroupBotManager.handle_command
|
||||
# 尝试作为序号
|
||||
if feature_identifier.isdigit():
|
||||
command_str = f"{feature_identifier}-{action}"
|
||||
else:
|
||||
# 尝试作为功能名
|
||||
# 查找匹配的功能枚举
|
||||
matched_feature = None
|
||||
for feature in Feature:
|
||||
# 尝试通过枚举名称匹配
|
||||
if feature.name.lower() == feature_identifier.lower():
|
||||
matched_feature = feature
|
||||
break
|
||||
# 尝试通过序号匹配
|
||||
if str(feature.value) == feature_identifier:
|
||||
matched_feature = feature
|
||||
break
|
||||
|
||||
if matched_feature:
|
||||
command_str = f"{matched_feature.value}-{action}"
|
||||
else:
|
||||
# 直接使用功能标识符(可能是序号或功能名)
|
||||
command_str = f"{feature_identifier}-{action}"
|
||||
|
||||
# 调用 GroupBotManager 处理命令
|
||||
result = gbm.handle_command(roomid if roomid else sender, command_str)
|
||||
|
||||
client_msg_id, create_time, new_msg_id = await bot.send_text_message(target, result, sender)
|
||||
revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 90)
|
||||
return True, "处理功能命令"
|
||||
|
||||
# 如果是其他未知命令,显示帮助
|
||||
help_text = f"❌命令格式错误!\n{self.command_format}"
|
||||
client_msg_id, create_time, new_msg_id = await bot.send_text_message(target, help_text, sender)
|
||||
revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 90)
|
||||
return True, "命令格式错误"
|
||||
|
||||
except Exception as e:
|
||||
self.LOG.error(f"处理功能请求出错: {e}")
|
||||
import traceback
|
||||
self.LOG.error(traceback.format_exc())
|
||||
return False, f"处理出错: {e}"
|
||||
|
||||
def _is_admin(self, user_id: str, gbm: GroupBotManager) -> bool:
|
||||
"""检查用户是否为管理员"""
|
||||
admin_list = gbm.get_admin_list() if gbm else []
|
||||
return user_id in admin_list
|
||||
|
||||
Reference in New Issue
Block a user