检查项
使用的分支
main
具体版本号
1.2.0(Docker 镜像:sengokucola/maibot:latest)
遇到的问题
在 WebUI 的「麦麦设置 → 命令管理」中,为受保护命令配置“仅为此命令放行用户”并保存后,WebUI 会把 bot_config.toml 写成非法 TOML。
以 /clear(core.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 = [] } }
报错信息
[config] 检测到配置文件变更,触发热重载
[webui] 读取配置文件失败: Unexpected character: 'a' at line 500 col 64
[config] 配置重载失败: Unexpected character: 'a' at line 500 col 64
前端错误页显示:
如何重现此问题?
-
使用 Docker 启动 MaiBot,并进入 WebUI。
-
打开「麦麦设置 → 命令管理」。
-
选择受保护命令 /clear。
-
在“仅为此命令放行用户”输入多个用户 ID,例如:
qq:111111111, qq:222222222
-
点击右上角保存。
-
WebUI 随后报“核心设置缺少 bot 配置节”或无法再读取配置。
-
检查 docker-config/mmc/bot_config.toml,可见 command_permissions 被写成非法 TOML;标准 TOML 解析器报 Unexpected character: 'a' at line 500 col 64。
可能造成问题的原因
初步定位在 WebUI 的完整配置保存链路:
src/webui/routers/config.py 的 POST /config/bot 调用 save_toml_with_format() 保存配置;
src/webui/utils/toml_utils.py 的 save_toml_with_format() 将数据交给 tomlkit.dumps() 后直接写入文件;
- 保存后没有对最终生成的 TOML 文本再次执行解析验证。
command_permissions 是“命令 ID → 权限规则对象”的嵌套字典,且规则中包含用户列表。该结构在可视化编辑器保存时被序列化成了不合法的 inline table。
建议:
- 为
command_permissions 增加明确的配置模型/schema;
- 修复嵌套对象和数组的 TOML 序列化;
- 写入前或写入后立即用
tomlkit.loads() 验证最终文本,失败时不要覆盖原文件;
- 当读取失败时,前端应直接展示 TOML 的行号、列号和原始解析错误,而不是误报“缺少 bot 配置节”。
系统环境
Linux;Docker Compose;Docker 镜像 sengokucola/maibot:latest
Python 版本
Python 3.13(Docker 容器内)
补充信息
已搜索 command_permissions、Unexpected character、WebUI/TOML 配置相关关键词,未找到同一问题。
相关但不相同的条目:
本问题的特点是:由“命令管理”的可视化表单触发,并且保存动作本身生成了非法 TOML。
检查项
使用的分支
main
具体版本号
1.2.0(Docker 镜像:sengokucola/maibot:latest)
遇到的问题
在 WebUI 的「麦麦设置 → 命令管理」中,为受保护命令配置“仅为此命令放行用户”并保存后,WebUI 会把
bot_config.toml写成非法 TOML。以
/clear(core.clear)为例,在“仅为此命令放行用户”中填写多个用户 ID,例如:点击保存后,
bot_config.toml中的plugin.command_permissions被写成类似下面的内容:其中
"core.clear" = allow_users = [...]不是合法 TOML:命令名等号右侧应是一个对象值,而不是继续直接写allow_users =。配置文件因此无法解析。之后 WebUI 重新加载配置失败,并在前端错误页显示“核心设置缺少 bot 配置节”;但
[bot]节实际仍存在,真正原因是整份 TOML 已无法解析。期望 WebUI 保存后生成合法结构,例如:
报错信息
前端错误页显示:
如何重现此问题?
使用 Docker 启动 MaiBot,并进入 WebUI。
打开「麦麦设置 → 命令管理」。
选择受保护命令
/clear。在“仅为此命令放行用户”输入多个用户 ID,例如:
点击右上角保存。
WebUI 随后报“核心设置缺少 bot 配置节”或无法再读取配置。
检查
docker-config/mmc/bot_config.toml,可见command_permissions被写成非法 TOML;标准 TOML 解析器报Unexpected character: 'a' at line 500 col 64。可能造成问题的原因
初步定位在 WebUI 的完整配置保存链路:
src/webui/routers/config.py的POST /config/bot调用save_toml_with_format()保存配置;src/webui/utils/toml_utils.py的save_toml_with_format()将数据交给tomlkit.dumps()后直接写入文件;command_permissions是“命令 ID → 权限规则对象”的嵌套字典,且规则中包含用户列表。该结构在可视化编辑器保存时被序列化成了不合法的 inline table。建议:
command_permissions增加明确的配置模型/schema;tomlkit.loads()验证最终文本,失败时不要覆盖原文件;系统环境
Linux;Docker Compose;Docker 镜像 sengokucola/maibot:latest
Python 版本
Python 3.13(Docker 容器内)
补充信息
已搜索
command_permissions、Unexpected character、WebUI/TOML 配置相关关键词,未找到同一问题。相关但不相同的条目:
bot_config.toml解析失败;本问题的特点是:由“命令管理”的可视化表单触发,并且保存动作本身生成了非法 TOML。