Files
DanDingNoneBot/review_reports/FINAL_REVIEW_REPORT.md

4.4 KiB
Raw Permalink Blame History

🔍 Danding-Bot 全项目代码评审综合报告

生成时间: 2026-05-09 | 评审范围: 14/14 plugins + 基础设施 + 跨插件一致性


📊 总览

指标 数值
评审插件 14/14
修复总数 ~35处
Git commits 2次 (Phase1: 31文件, Phase2: 2文件)
修复类别 安全5 / Bug6 / 鲁棒性8 / 可读性7 / 一致性9

🛡️ 一、安全类修复 (5处)

# 文件 问题 修复
1 danding_points/query.py:23 Token明文打印 print(token) logger.debug()
2 danding_points/admin_manage.py:115 Token明文打印 print(token) logger.debug()
3 group_horse_racing/horse_race.py:96 Bot Token泄露 print(BOT_TOKEN) logger.debug()
4 danding_api/main.py 无限制轮询(可被DoS) → 添加 max_retries=3 + 超时
5 .env确认 .env.gitignore 已排除,无泄露

🐛 二、Bug修复 (6处)

# 文件 问题 修复
1 chatai/utils/text_image.py render_text_to_image 未定义 → 调用正确函数
2 danding_qqpush/tasks.py bare except: 吞所有异常 except Exception as e + logger
3 group_horse_racing/horse_race.py HorseState 类型不安全 → 枚举类型加固
4 auto_friend_accept/auto_accept.py 同步阻塞调用 → async/await
5 points_service.py:278 int() 截断小数→0积分 max(1, round(...))
6 room_store.py:45 get_lock TOCTOU竞态 setdefault() 原子操作

🔄 三、鲁棒性修复 (8处)

# 文件 问题 修复
1 danding_api/main.py API无retry → 3次重试+指数退避
2 danding_api/main.py 响应无校验 response.ok 检查
3 onmyoji_gacha/api_utils.py 无超时 timeout=10
4 onmyoji_gacha/api_utils.py 无重试 → retry装饰器
5 welcome_plugin/welcome.py 空消息未处理 → 提前返回
6 damo_balance/AccountSpider.py GB2312编码错误 response.encoding='gb2312'
7 共享模块 bare except 5处 → 具体异常类型
8 共享模块 无logger的错误吞没 → logger.error记录

📖 四、可读性/一致性修复 (7处)

# 文件 问题 修复
1 onmyoji_gacha/init.py 魔法数字 → 命名常量
2 group_horse_racing/ 命名不一致 → 统一snake_case
3 多文件 f-string缺失 → 统一f-string
4 多文件 注释过时 → 更新/移除
5 多文件 函数过长 → 拆分提取
6 多文件 返回值不一致 → 统一格式
7 多文件 import顺序 → PEP8分组

🔗 五、跨插件一致性检查

检查项 结果
Logger使用 14/14插件均使用logger仅damo_balance.main()保留print(独立测试函数)
Config模式 12/14有config.py2个(welcome,review_reports)无配置合理
跨插件依赖 依赖方向清晰: danding_points←3插件, danding_qqpush←1插件
.env安全 .gitignore已排除

🏗️ 六、基础设施层检查

检查项 结果
bot.py 简洁标准NoneBot入口
pyproject.toml 插件加载配置正确
requirements.txt ⚠️ 有tortoise-orm(未使用),建议清理
.env 含凭证,已在.gitignore

⚠️ 已知不修改项(合理风险)

原因
data_manager f-string SQL 安全——placeholders只有?,值通过参数传入
damo_balance.main() print 合理——独立测试脚本的控制台输出
tortoise-orm依赖 ⚠️ 未使用但不影响运行,低优先级

🎯 后续建议

  1. requirements.txt清理: 移除未使用的tortoise-orm等依赖
  2. 单元测试: 为points_service/room_store/data_manager核心逻辑添加测试
  3. CI/CD: 添加ruff/mypy静态检查
  4. 文档: 补充每个插件的README使用说明

评审遵循 code_review_principles_sop 15条原则特别关注: 局部可推理(§2)、约束写进代码(§6)、一致且不意外(§8)、Let it crash(§14)