跳到主要内容

命令管理 ​

从 1.2.0 起,MaiBot 对插件命令提供统一管理:在 WebUI 中查看所有已注册的命令,并为命令配置执行权限(鉴权)。入口在「麦麦设置」页(侧边栏「配置管理」分组 → 麦麦设置)顶部的 命令管理 标签,地址 /config/bot?mode=commands;麦麦设置顶部有两个标签(详细设置 / 命令管理)和一个省略号菜单,命令管理是第二个标签。

命令管理

查看所有命令 ​

命令管理会列出当前运行时所有已注册的插件命令:

  • 命令名称 与触发模式
  • 所属插件 与描述
  • 鉴权标记 — 标记为「操作员」级别的命令需要额外授权才能执行
  • 停用标记 — 被停用的命令显示「已停用」徽标,与「受保护 / 公开」并列

列表里除了各插件注册的命令,还有 MaiBot 核心的内置命令 core.clear(/clear,清空当前聊天的历史上下文),它同样受这条页面的开关管理。

支持按名称、描述或插件名搜索命令,快速定位目标。

命令鉴权 ​

命令可以要求操作员权限(operator 级别)。一个命令被标记为操作员级别后,只有以下用户 / 聊天可以执行它:

  • 操作员列表 — [plugin].permission 中配置的用户(platform:id 格式,如 qq:123456789)
  • 命令放行规则 — 为该命令单独配置的 allow_users(允许执行的用户)与 allow_chats(允许执行的真实聊天流)

在命令管理页中:

  1. 选中一个命令
  2. 在 放行用户 中添加允许执行该命令的用户(platform:id 格式)
  3. 在 放行聊天 中选择允许执行该命令的聊天流(从已存在的聊天流中选择)
  4. 保存后,配置写入 bot_config.toml 的 [plugin] 段

权限判定顺序

未匹配任何放行规则的命令,普通用户无法执行。判定逻辑由 has_command_permission() 统一处理:先看用户是否为操作员,再看命令级放行规则是否命中。

停用命令 ​

选中一条命令后,详情卡片最上方是 启用此命令 开关。关掉它,聊天里的命令文本就不再触发这条命令,消息按普通消息继续处理——适合临时让某个命令「静音」,又不想卸载插件。

  • 写入 bot_config.toml 的 [plugin].disabled_commands(命令 ID 数组,格式 plugin_id.command_name)
  • 保存时按命令列表的顺序写入,与你的点击顺序无关
  • 左侧列表里该命令会出现「已停用」徽标
  • 重新打开开关即恢复,徽标消失

不显示无权限提示 ​

命令详情的「仅为此命令放行用户」卡片下方有 不显示无权限提示 开关。开启后,普通用户执行受保护命令但没有权限时,麦麦不再回复提示消息,只静默拦截并写日志——群里少一条刷屏提示,排查时仍能在日志里看到。

  • 写入 [plugin].silent_permission_denied(布尔值,作用于所有受保护命令)
  • 这个配置 1.3.1 就存在于 bot_config.toml,1.3.2 才在命令管理页暴露成开关
  • 关闭开关(默认)时,无权限执行会照常收到提示消息

配置文件 ​

命令权限保存在 bot_config.toml 的 [plugin] 段:

toml
[plugin]
permission = ["qq:123456789"]  # 操作员列表
silent_permission_denied = true  # 无权限时静默拦截,不回提示消息
disabled_commands = ["example-plugin.example-command"]  # 已停用的命令 ID

[plugin.command_permissions.example-plugin.example-command]
allow_users = ["qq:987654321"]  # 额外放行的用户
allow_chats = ["chat-xxxx"]     # 额外放行的聊天流 ID

验证与排错 ​

验证:在命令管理页搜索一个命令名,能搜到且鉴权标记正确,说明命令已注册。

命令列表是空的?

  • 确认对应插件已安装并启用
  • 插件未声明 Command 组件时不会出现在列表里

命令明明在,群里发了却没反应?

  • 看列表里有没有「已停用」徽标;有就打开「启用此命令」开关
  • 内置 /clear 的 ID 是 core.clear,也会被同一个开关管

保存放行规则失败?

  • 用户 ID 必须是 platform:id 格式
  • 放行聊天只能从已存在的聊天流中选择

相关文档 ​