# 🔍 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.py,2个(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)*