255 lines
4.6 KiB
Markdown
255 lines
4.6 KiB
Markdown
# 技术决策日志
|
||
|
||
记录项目中的重要技术决策、原因和影响。
|
||
|
||
---
|
||
|
||
## 2025-01-12
|
||
|
||
### 决策 #001: 项目架构选择
|
||
|
||
**决策:** 采用四层架构设计(DLL Hook → WechatHook → Bot Core → Plugin)
|
||
|
||
**原因:**
|
||
- 清晰的职责分离
|
||
- 便于维护和扩展
|
||
- 最大化复用 XYBotV2 代码
|
||
|
||
**影响:**
|
||
- 代码结构清晰
|
||
- 80% 代码可复用
|
||
- 学习成本低
|
||
|
||
**状态:** ✅ 已实施
|
||
|
||
---
|
||
|
||
### 决策 #002: DLL 文件存放位置
|
||
|
||
**决策:** DLL 文件放在项目的 `libs/` 目录,不放到微信安装目录
|
||
|
||
**原因:**
|
||
- Loader.dll 由 Python 程序直接加载
|
||
- Helper.dll 由 Loader.dll 动态注入到微信进程
|
||
- 不需要修改微信安装目录
|
||
|
||
**影响:**
|
||
- 部署更简单
|
||
- 不污染微信目录
|
||
- 便于版本管理
|
||
|
||
**状态:** ✅ 已实施
|
||
|
||
---
|
||
|
||
### 决策 #003: 不进行本地测试
|
||
|
||
**决策:** 所有测试在远程设备进行,开发过程中不在本地运行
|
||
|
||
**原因:**
|
||
- 用户要求
|
||
- 避免本地环境污染
|
||
- 专注于代码实现
|
||
|
||
**影响:**
|
||
- 需要更仔细的代码审查
|
||
- 依赖用户反馈进行调试
|
||
- 开发周期可能稍长
|
||
|
||
**状态:** ✅ 已实施
|
||
|
||
---
|
||
|
||
### 决策 #004: 复用 XYBotV2 插件系统
|
||
|
||
**决策:** 完全复用 XYBotV2 的插件系统(PluginBase、EventManager、装饰器)
|
||
|
||
**原因:**
|
||
- 插件系统设计优秀
|
||
- 已经过验证
|
||
- 减少开发工作量
|
||
- 保持插件兼容性
|
||
|
||
**影响:**
|
||
- 开发速度快
|
||
- XYBot 插件可直接使用
|
||
- 代码质量有保证
|
||
|
||
**状态:** ✅ 已确定,待实施
|
||
|
||
---
|
||
|
||
### 决策 #005: 使用 Memory Bank 系统
|
||
|
||
**决策:** 创建 Memory Bank 文件夹,实时跟踪项目进度和决策
|
||
|
||
**原因:**
|
||
- 用户要求
|
||
- 便于项目管理
|
||
- 保持开发上下文
|
||
- 方便后续维护
|
||
|
||
**影响:**
|
||
- 项目管理更规范
|
||
- 决策过程可追溯
|
||
- 便于团队协作
|
||
|
||
**文件结构:**
|
||
- projectBrief.md - 项目简介
|
||
- activeContext.md - 当前上下文
|
||
- progress.md - 进度跟踪
|
||
- decisionLog.md - 决策日志
|
||
- systemPatterns.md - 系统模式
|
||
|
||
**状态:** ✅ 已实施
|
||
|
||
---
|
||
|
||
### 决策 #006: 消息类型映射策略
|
||
|
||
**决策:** 创建独立的 message_types.py 文件,定义 API type 到内部 event 的映射
|
||
|
||
**原因:**
|
||
- 解耦消息类型定义
|
||
- 便于维护和扩展
|
||
- 统一消息格式转换
|
||
|
||
**实现方式:**
|
||
```python
|
||
MESSAGE_TYPE_MAP = {
|
||
10001: "text_message",
|
||
10002: "image_message",
|
||
# ...
|
||
}
|
||
```
|
||
|
||
**影响:**
|
||
- 代码更清晰
|
||
- 易于添加新消息类型
|
||
- 便于调试
|
||
|
||
**状态:** ✅ 已确定,待实施
|
||
|
||
---
|
||
|
||
### 决策 #007: 回调处理机制
|
||
|
||
**决策:** 使用装饰器模式实现回调处理(@CONNECT_CALLBACK, @RECV_CALLBACK, @CLOSE_CALLBACK)
|
||
|
||
**原因:**
|
||
- 参考 python_demo.py 的实现
|
||
- 代码简洁优雅
|
||
- 易于扩展
|
||
|
||
**影响:**
|
||
- 回调注册简单
|
||
- 支持多个回调处理器
|
||
- 代码可读性好
|
||
|
||
**状态:** ✅ 已确定,待实施
|
||
|
||
---
|
||
|
||
### 决策 #008: 异步编程模型
|
||
|
||
**决策:** 使用 asyncio 作为异步编程框架,所有 API 都是异步函数
|
||
|
||
**原因:**
|
||
- 与 XYBotV2 保持一致
|
||
- 提高并发性能
|
||
- 插件系统要求
|
||
|
||
**影响:**
|
||
- 所有函数必须使用 async/await
|
||
- 需要处理同步/异步转换
|
||
- 性能更好
|
||
|
||
**状态:** ✅ 已确定,待实施
|
||
|
||
---
|
||
|
||
### 决策 #009: 配置文件格式
|
||
|
||
**决策:** 使用 TOML 格式作为配置文件格式
|
||
|
||
**原因:**
|
||
- 与 XYBotV2 保持一致
|
||
- 可读性好
|
||
- Python 3.11+ 原生支持
|
||
|
||
**影响:**
|
||
- 配置文件易于编辑
|
||
- 支持注释
|
||
- 类型安全
|
||
|
||
**状态:** ✅ 已实施
|
||
|
||
---
|
||
|
||
### 决策 #010: 数据库选择
|
||
|
||
**决策:** 使用 SQLite + aiosqlite 作为数据库
|
||
|
||
**原因:**
|
||
- 与 XYBotV2 保持一致
|
||
- 无需额外服务
|
||
- 支持异步操作
|
||
|
||
**影响:**
|
||
- 部署简单
|
||
- 性能足够
|
||
- 便于备份
|
||
|
||
**状态:** ✅ 已确定,待实施
|
||
|
||
---
|
||
|
||
## 待决策事项
|
||
|
||
### 待决策 #001: 消息类型 type 值
|
||
|
||
**问题:** 个微 API 各类消息的具体 type 值未知
|
||
|
||
**选项:**
|
||
1. 参考 API 文档推测
|
||
2. 实际测试获取
|
||
|
||
**倾向:** 选项 2 - 实际测试获取
|
||
|
||
**需要:** 用户提供实际消息的 type 值
|
||
|
||
---
|
||
|
||
### 待决策 #002: WebUI 是否实现
|
||
|
||
**问题:** 是否需要实现 Web 管理界面
|
||
|
||
**选项:**
|
||
1. 立即实现
|
||
2. 基础功能完成后再实现
|
||
3. 不实现
|
||
|
||
**倾向:** 选项 2 - 基础功能完成后再实现
|
||
|
||
**原因:** 先保证核心功能稳定
|
||
|
||
---
|
||
|
||
## 决策模板
|
||
|
||
```markdown
|
||
### 决策 #XXX: 决策标题
|
||
|
||
**决策:** 简要描述决策内容
|
||
|
||
**原因:**
|
||
- 原因1
|
||
- 原因2
|
||
|
||
**影响:**
|
||
- 影响1
|
||
- 影响2
|
||
|
||
**状态:** ✅ 已实施 / 🚧 进行中 / ⏳ 待实施 / ❌ 已废弃
|
||
```
|