命令监听配置重构:SQLite → YAML + 黑白名单过滤优化 #2

Merged
zhilv merged 5 commits from feat/command-scope into main 2026-05-04 00:09:57 +08:00
Owner

Summary

  • 配置系统从 SQLite 迁移至 YAML,支持热重载,修复白名单过滤失效的 stale import bug
  • 黑白名单新增开关控制,过滤逻辑从 AND 改为 OR(用户在名单 OR 群在名单)
  • 管理界面重构:自动保存、最大宽度限制、名单灰度提示、状态脉冲动画

Changes

配置系统重构

  • 删除 db.py,改用 settings.yaml 存储动态配置
  • CommandConfig dataclass 单例替代模块级变量,解决 from import 本地绑定不随 global 更新的 bug
  • 新增 2 秒轮询文件 watcher,检测 YAML 变更自动热重载
  • 首次启动自动创建 settings.yaml,合并 .env 环境变量默认值
  • 依赖 aiosqlite 替换为 pyyaml

黑白名单优化

  • 新增 list_enabled 开关控制是否启用名单过滤
  • 过滤逻辑从 AND 改为 OR:白名单模式下用户在名单或群在名单即可触发
  • 黑名单模式同理:用户或群任一在名单则拒绝
  • 名单为空时表示不限制

管理界面改进

  • 表单变更后 800ms 自动保存,去掉手动保存按钮
  • Header 显示"未保存"指示器
  • 内容区限制最大宽度 900px
  • 侧边栏增加圆角选中态,运行状态带脉冲动画
  • 白名单模式下灰掉黑名单输入,关闭名单时显示遮罩
  • 命令测试结果增加成功/失败颜色反馈
  • 回调数据格式改用等宽字体代码块

Test plan

  • 启动插件,确认 settings.yaml 自动生成
  • 通过管理界面修改配置,确认自动保存并即时生效
  • 手动编辑 settings.yaml,确认 2 秒内热重载
  • 测试白名单:设置白名单群,确认该群全员可用
  • 测试白名单:设置白名单用户,确认该用户全域可用
  • 测试黑名单:设置黑名单用户,确认该用户被拒绝
  • 测试名单开关:关闭名单功能,确认过滤不生效
## Summary - 配置系统从 SQLite 迁移至 YAML,支持热重载,修复白名单过滤失效的 stale import bug - 黑白名单新增开关控制,过滤逻辑从 AND 改为 OR(用户在名单 OR 群在名单) - 管理界面重构:自动保存、最大宽度限制、名单灰度提示、状态脉冲动画 ## Changes ### 配置系统重构 - 删除 `db.py`,改用 `settings.yaml` 存储动态配置 - 用 `CommandConfig` dataclass 单例替代模块级变量,解决 `from import` 本地绑定不随 `global` 更新的 bug - 新增 2 秒轮询文件 watcher,检测 YAML 变更自动热重载 - 首次启动自动创建 `settings.yaml`,合并 `.env` 环境变量默认值 - 依赖 `aiosqlite` 替换为 `pyyaml` ### 黑白名单优化 - 新增 `list_enabled` 开关控制是否启用名单过滤 - 过滤逻辑从 AND 改为 OR:白名单模式下用户在名单或群在名单即可触发 - 黑名单模式同理:用户或群任一在名单则拒绝 - 名单为空时表示不限制 ### 管理界面改进 - 表单变更后 800ms 自动保存,去掉手动保存按钮 - Header 显示"未保存"指示器 - 内容区限制最大宽度 900px - 侧边栏增加圆角选中态,运行状态带脉冲动画 - 白名单模式下灰掉黑名单输入,关闭名单时显示遮罩 - 命令测试结果增加成功/失败颜色反馈 - 回调数据格式改用等宽字体代码块 ## Test plan - [ ] 启动插件,确认 `settings.yaml` 自动生成 - [ ] 通过管理界面修改配置,确认自动保存并即时生效 - [ ] 手动编辑 `settings.yaml`,确认 2 秒内热重载 - [ ] 测试白名单:设置白名单群,确认该群全员可用 - [ ] 测试白名单:设置白名单用户,确认该用户全域可用 - [ ] 测试黑名单:设置黑名单用户,确认该用户被拒绝 - [ ] 测试名单开关:关闭名单功能,确认过滤不生效
zhilv added 5 commits 2026-05-04 00:09:49 +08:00
- 新增 COMMAND_SCOPE 配置,支持 all/group/private 过滤消息来源
- 新增 COMMAND_ALLOWED_GROUPS 群号白名单,逗号分隔,留空不限制
- 新增 COMMAND_ALLOWED_USERS QQ 号白名单,逗号分隔,留空不限制
- 新增 COMMAND_AT_SENDER 配置,控制回复时是否 @发送者(默认 true)
- 回调响应中 at_sender 字段可覆盖全局配置
- 更新 .env.example 和 README.md 文档
- 新增 SQLite 数据库层(db.py)持久化命令监听配置,支持热更新无需重启
- 命令过滤从白名单扩展为黑白名单双模式(COMMAND_LIST_MODE: allow/deny)
- 新增后台管理页面 /admin/,侧边栏布局,支持在线修改所有命令监听配置
- 新增 REST API:GET/PUT /api/settings、POST /api/settings/reload
- 新增 rebuild_pattern() 支持配置变更后正则动态重编译
- 中间件放行 /admin 和 /api 路径免鉴权
- 添加 aiosqlite 依赖
- 用 CommandConfig dataclass 单例替代模块级变量,解决 from import 造成的本地绑定不随 global 更新的 bug
- 删除 db.py,改用 settings.yaml 存储动态配置,首次启动自动创建并合并 .env 默认值
- 新增文件轮询 watcher(2 秒),检测 YAML 变更自动热重载
- 管理界面 API 改为直接读写 YAML,即时生效
- 依赖 aiosqlite 替换为 pyyaml
- 新增 list_enabled 开关控制是否启用名单过滤
- 表单变更后 800ms 自动保存,去掉手动保存按钮
- Header 显示"未保存"指示器,保存中 toast 提示
- 内容区限制最大宽度 900px,优化宽屏显示
- 侧边栏增加圆角选中态,运行状态带脉冲动画
- 白名单模式灰掉黑名单输入,关闭名单时显示遮罩
- 命令测试结果增加成功/失败颜色反馈
- 回调格式改用等宽字体代码块
- 白名单模式:用户在名单 OR 群在名单 → 放行
- 黑名单模式:用户在名单 OR 群在名单 → 拒绝
- 名单为空时表示不限制
- 更新前端提示说明 OR 逻辑的语义
zhilv merged commit 29433dda02 into main 2026-05-04 00:09:57 +08:00
zhilv deleted branch feat/command-scope 2026-05-04 00:10:01 +08:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ncatbot/webhook#2