From c6739105c42da28295a652c38040d16330e78609 Mon Sep 17 00:00:00 2001 From: Oscar Date: Thu, 11 Dec 2025 14:34:46 +0800 Subject: [PATCH] =?UTF-8?q?refactor(commands):=20=E9=87=8D=E6=9E=84/help?= =?UTF-8?q?=E6=8C=87=E4=BB=A4=E4=BB=A5=E5=8A=A8=E6=80=81=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E5=AE=9E=E9=99=85=E5=91=BD=E4=BB=A4=E5=B9=B6=E8=A1=A5=E5=85=85?= =?UTF-8?q?=E9=83=A8=E5=88=86=E5=91=BD=E4=BB=A4=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/astrbot/commands/help.py | 81 +++++++++++++++++++---------- packages/astrbot/main.py | 7 ++- packages/python_interpreter/main.py | 2 +- packages/reminder/main.py | 2 +- packages/web_searcher/main.py | 1 + 5 files changed, 61 insertions(+), 32 deletions(-) diff --git a/packages/astrbot/commands/help.py b/packages/astrbot/commands/help.py index 7f5b6c170..092fc59ec 100644 --- a/packages/astrbot/commands/help.py +++ b/packages/astrbot/commands/help.py @@ -3,6 +3,7 @@ import aiohttp from astrbot.api import star from astrbot.api.event import AstrMessageEvent, MessageEventResult from astrbot.core.config.default import VERSION +from astrbot.core.star import command_management from astrbot.core.utils.io import get_dashboard_version @@ -21,6 +22,46 @@ class HelpCommand: except BaseException: return "" + async def _build_reserved_command_lines(self) -> list[str]: + """ + 使用实时指令配置生成内置指令清单,确保重命名/禁用后与实际生效状态保持一致。 + """ + try: + commands = await command_management.list_commands() + except BaseException: + return [] + + lines: list[str] = [] + hidden_commands = {"set", "unset", "websearch"} + + def walk(items: list[dict], indent: int = 0): + for item in items: + if not item.get("reserved") or not item.get("enabled"): + continue + # 仅展示顶级指令或指令组 + if item.get("type") == "sub_command": + continue + if item.get("parent_signature"): + continue + + effective = ( + item.get("effective_command") + or item.get("original_command") + or item.get("handler_name") + ) + if not effective: + continue + if effective in hidden_commands: + continue + + description = item.get("description") or "" + desc_text = f" - {description}" if description else "" + indent_prefix = " " * indent + lines.append(f"{indent_prefix}/{effective}{desc_text}") + + walk(commands) + return lines + async def help(self, event: AstrMessageEvent): """查看帮助""" notice = "" @@ -30,34 +71,18 @@ class HelpCommand: pass dashboard_version = await get_dashboard_version() + command_lines = await self._build_reserved_command_lines() + commands_section = ( + "\n".join(command_lines) if command_lines else "暂无启用的内置指令" + ) - msg = f"""AstrBot v{VERSION}(WebUI: {dashboard_version}) -内置指令: -[System] -/plugin: 查看插件、插件帮助 -/t2i: 开关文本转图片 -/tts: 开关文本转语音 -/sid: 获取会话 ID -/op: 管理员 -/wl: 白名单 -/dashboard_update: 更新管理面板(op) -/alter_cmd: 设置指令权限(op) - -[大模型] -/llm: 开启/关闭 LLM -/provider: 大模型提供商 -/model: 模型列表 -/ls: 对话列表 -/new: 创建新对话 -/groupnew 群号: 为群聊创建新对话(op) -/switch 序号: 切换对话 -/rename 新名字: 重命名当前对话 -/del: 删除当前会话对话(op) -/reset: 重置 LLM 会话 -/history: 当前对话的对话记录 -/persona: 人格情景(op) -/key: API Key(op) -/websearch: 网页搜索 -{notice}""" + msg_parts = [ + f"AstrBot v{VERSION}(WebUI: {dashboard_version})", + "内置指令:", + commands_section, + ] + if notice: + msg_parts.append(notice) + msg = "\n".join(msg_parts) event.set_result(MessageEventResult().message(msg).use_t2i(False)) diff --git a/packages/astrbot/main.py b/packages/astrbot/main.py index 06077017f..c57fec9e0 100644 --- a/packages/astrbot/main.py +++ b/packages/astrbot/main.py @@ -68,7 +68,7 @@ class Main(star.Star): @filter.command_group("tool") def tool(self): - pass + """函数工具管理""" @tool.command("ls") async def tool_ls(self, event: AstrMessageEvent): @@ -92,7 +92,7 @@ class Main(star.Star): @filter.command_group("plugin") def plugin(self): - pass + """插件管理""" @plugin.command("ls") async def plugin_ls(self, event: AstrMessageEvent): @@ -238,14 +238,17 @@ class Main(star.Star): @filter.permission_type(filter.PermissionType.ADMIN) @filter.command("dashboard_update") async def update_dashboard(self, event: AstrMessageEvent): + """更新管理面板""" await self.admin_c.update_dashboard(event) @filter.command("set") async def set_variable(self, event: AstrMessageEvent, key: str, value: str): + """设置全局变量""" await self.setunset_c.set_variable(event, key, value) @filter.command("unset") async def unset_variable(self, event: AstrMessageEvent, key: str): + """删除全局变量""" await self.setunset_c.unset_variable(event, key) @filter.platform_adapter_type(filter.PlatformAdapterType.ALL) diff --git a/packages/python_interpreter/main.py b/packages/python_interpreter/main.py index 35a2f2698..25cad87a6 100644 --- a/packages/python_interpreter/main.py +++ b/packages/python_interpreter/main.py @@ -244,7 +244,7 @@ class Main(star.Star): @filter.command_group("pi") def pi(self): - pass + """代码执行器配置""" @pi.command("absdir") async def pi_absdir(self, event: AstrMessageEvent, path: str = ""): diff --git a/packages/reminder/main.py b/packages/reminder/main.py index eaeec8d73..342fa0ae4 100644 --- a/packages/reminder/main.py +++ b/packages/reminder/main.py @@ -176,7 +176,7 @@ class Main(star.Star): @filter.command_group("reminder") def reminder(self): - """The command group of the reminder.""" + """待办提醒""" async def get_upcoming_reminders(self, unified_msg_origin: str): """Get upcoming reminders.""" diff --git a/packages/web_searcher/main.py b/packages/web_searcher/main.py index 118ef2483..4745cd0c0 100644 --- a/packages/web_searcher/main.py +++ b/packages/web_searcher/main.py @@ -185,6 +185,7 @@ class Main(star.Star): @filter.command("websearch") async def websearch(self, event: AstrMessageEvent, oper: str | None = None): + """网页搜索指令(已废弃)""" event.set_result( MessageEventResult().message( "此指令已经被废弃,请在 WebUI 中开启或关闭网页搜索功能。",