Skip to content

[BUG] WebUI 命令管理保存“仅为此命令放行用户”后写出非法 TOML,导致主配置无法读取 #1995

Description

@happycola233

检查项

  • 我确认此问题在所有分支的最新版本中依旧存在
  • 我确认在 Issues 列表中并无其他人已经提出过与此问题相同或相似的问题
  • 我使用了 Docker

使用的分支

main

具体版本号

1.2.0(Docker 镜像:sengokucola/maibot:latest)

遇到的问题

在 WebUI 的「麦麦设置 → 命令管理」中,为受保护命令配置“仅为此命令放行用户”并保存后,WebUI 会把 bot_config.toml 写成非法 TOML。

/clearcore.clear)为例,在“仅为此命令放行用户”中填写多个用户 ID,例如:

qq:111111111, qq:222222222

点击保存后,bot_config.toml 中的 plugin.command_permissions 被写成类似下面的内容:

command_permissions = {"core.clear" = allow_users = [
    "qq:111111111",
    "qq:222222222",
]
allow_chats = []
}

其中 "core.clear" = allow_users = [...] 不是合法 TOML:命令名等号右侧应是一个对象值,而不是继续直接写 allow_users =

配置文件因此无法解析。之后 WebUI 重新加载配置失败,并在前端错误页显示“核心设置缺少 bot 配置节”;但 [bot] 节实际仍存在,真正原因是整份 TOML 已无法解析。

期望 WebUI 保存后生成合法结构,例如:

command_permissions = { "core.clear" = { allow_users = ["qq:111111111", "qq:222222222"], allow_chats = [] } }

报错信息

Image
[config] 检测到配置文件变更,触发热重载
[webui] 读取配置文件失败: Unexpected character: 'a' at line 500 col 64
[config] 配置重载失败: Unexpected character: 'a' at line 500 col 64

前端错误页显示:

Error: 核心设置缺少 bot 配置节

如何重现此问题?

  1. 使用 Docker 启动 MaiBot,并进入 WebUI。

  2. 打开「麦麦设置 → 命令管理」。

  3. 选择受保护命令 /clear

  4. 在“仅为此命令放行用户”输入多个用户 ID,例如:

    qq:111111111, qq:222222222
    
  5. 点击右上角保存。

  6. WebUI 随后报“核心设置缺少 bot 配置节”或无法再读取配置。

  7. 检查 docker-config/mmc/bot_config.toml,可见 command_permissions 被写成非法 TOML;标准 TOML 解析器报 Unexpected character: 'a' at line 500 col 64

可能造成问题的原因

初步定位在 WebUI 的完整配置保存链路:

  • src/webui/routers/config.pyPOST /config/bot 调用 save_toml_with_format() 保存配置;
  • src/webui/utils/toml_utils.pysave_toml_with_format() 将数据交给 tomlkit.dumps() 后直接写入文件;
  • 保存后没有对最终生成的 TOML 文本再次执行解析验证。

command_permissions 是“命令 ID → 权限规则对象”的嵌套字典,且规则中包含用户列表。该结构在可视化编辑器保存时被序列化成了不合法的 inline table。

建议:

  1. command_permissions 增加明确的配置模型/schema;
  2. 修复嵌套对象和数组的 TOML 序列化;
  3. 写入前或写入后立即用 tomlkit.loads() 验证最终文本,失败时不要覆盖原文件;
  4. 当读取失败时,前端应直接展示 TOML 的行号、列号和原始解析错误,而不是误报“缺少 bot 配置节”。

系统环境

Linux;Docker Compose;Docker 镜像 sengokucola/maibot:latest

Python 版本

Python 3.13(Docker 容器内)

补充信息

已搜索 command_permissionsUnexpected character、WebUI/TOML 配置相关关键词,未找到同一问题。

相关但不相同的条目:

本问题的特点是:由“命令管理”的可视化表单触发,并且保存动作本身生成了非法 TOML。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions