feat:初版
This commit is contained in:
253
docs/架构设计.md
Normal file
253
docs/架构设计.md
Normal file
@@ -0,0 +1,253 @@
|
||||
# WechatHookBot 架构设计
|
||||
|
||||
## 技术架构
|
||||
|
||||
### 四层架构
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 第四层:WebUI 层(可选) │
|
||||
│ Flask + SocketIO + Bootstrap │
|
||||
│ - 插件管理、消息监控、配置管理 │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
↕
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 第三层:插件层(完全复用 XYBot) │
|
||||
│ PluginManager → PluginBase → 具体插件 │
|
||||
│ 装饰器:@on_text_message, @on_image_message, @schedule │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
↕
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 第二层:Bot 核心层 │
|
||||
│ HookBot - 消息预处理、路由、类型映射 │
|
||||
│ EventManager - 事件分发、优先级、阻塞机制 │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
↕
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 第一层:WechatHook 层 │
|
||||
│ WechatHookClient - API 封装 │
|
||||
│ NoveLoader - DLL 调用 │
|
||||
│ 回调处理器 - Socket 回调 │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
↕
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 底层:DLL 层 │
|
||||
│ Loader.dll ←→ Helper.dll (注入微信进程) ←→ 微信客户端 │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 消息流转
|
||||
|
||||
### 接收消息流程
|
||||
|
||||
```
|
||||
微信消息
|
||||
→ Helper.dll (注入微信进程)
|
||||
→ Socket 回调
|
||||
→ on_recv_callback(client_id, msg_type, data)
|
||||
→ HookBot.process_message()
|
||||
→ 消息类型映射 (type → event)
|
||||
→ EventManager.emit(event_type, client, message)
|
||||
→ 插件事件处理器(按优先级执行)
|
||||
```
|
||||
|
||||
### 发送消息流程
|
||||
|
||||
```
|
||||
插件调用
|
||||
→ client.send_text(wxid, content)
|
||||
→ WechatHookClient 封装
|
||||
→ 构造 JSON payload {"type": 11036, "data": {...}}
|
||||
→ NoveLoader.SendWeChatData()
|
||||
→ Loader.dll
|
||||
→ Helper.dll
|
||||
→ 微信发送
|
||||
```
|
||||
|
||||
## 核心模块
|
||||
|
||||
### 1. WechatHook 层
|
||||
|
||||
**NoveLoader** - DLL 函数封装
|
||||
```python
|
||||
class NoveLoader:
|
||||
- InitWeChatSocket() # 初始化回调
|
||||
- InjectWeChat() # 注入微信
|
||||
- SendWeChatData() # 发送数据
|
||||
- DestroyWeChat() # 销毁连接
|
||||
```
|
||||
|
||||
**WechatHookClient** - API 封装
|
||||
```python
|
||||
class WechatHookClient:
|
||||
- send_text() # 发送文本
|
||||
- send_image() # 发送图片
|
||||
- send_file() # 发送文件
|
||||
- get_friend_list() # 获取好友列表
|
||||
- get_chatroom_list() # 获取群聊列表
|
||||
- add_friend() # 添加好友
|
||||
# ... 更多 API
|
||||
```
|
||||
|
||||
### 2. Bot 核心层
|
||||
|
||||
**HookBot** - 消息处理核心
|
||||
```python
|
||||
class HookBot:
|
||||
- process_message() # 处理消息
|
||||
- _normalize_message() # 统一消息格式
|
||||
- _filter_message() # 白名单/黑名单过滤
|
||||
```
|
||||
|
||||
**EventManager** - 事件管理(复用 XYBot)
|
||||
```python
|
||||
class EventManager:
|
||||
- bind_instance() # 绑定插件实例
|
||||
- emit() # 触发事件
|
||||
- unbind_instance() # 解绑实例
|
||||
```
|
||||
|
||||
### 3. 插件层
|
||||
|
||||
**PluginBase** - 插件基类(复用 XYBot)
|
||||
```python
|
||||
class PluginBase:
|
||||
description: str
|
||||
author: str
|
||||
version: str
|
||||
|
||||
async def on_enable() # 启用时调用
|
||||
async def on_disable() # 禁用时调用
|
||||
async def async_init() # 异步初始化
|
||||
```
|
||||
|
||||
**装饰器系统**(复用 XYBot)
|
||||
- `@on_text_message` - 文本消息
|
||||
- `@on_image_message` - 图片消息
|
||||
- `@on_voice_message` - 语音消息
|
||||
- `@on_at_message` - @消息
|
||||
- `@schedule` - 定时任务
|
||||
|
||||
## 消息类型映射
|
||||
|
||||
从个微 API 的 type 值映射到内部事件类型:
|
||||
|
||||
```python
|
||||
MESSAGE_TYPE_MAP = {
|
||||
# 需要根据实际 API 文档补充
|
||||
10001: "text_message",
|
||||
10002: "image_message",
|
||||
10003: "voice_message",
|
||||
10004: "video_message",
|
||||
10005: "file_message",
|
||||
10006: "card_message",
|
||||
10007: "location_message",
|
||||
10008: "link_message",
|
||||
10009: "miniapp_message",
|
||||
10010: "emoji_message",
|
||||
10011: "revoke_message",
|
||||
10012: "system_message",
|
||||
10013: "friend_request",
|
||||
# 群聊通知
|
||||
10020: "chatroom_member_add",
|
||||
10021: "chatroom_member_remove",
|
||||
}
|
||||
```
|
||||
|
||||
## 数据库设计
|
||||
|
||||
复用 XYBot 的数据库架构:
|
||||
|
||||
### XYBotDB (SQLite)
|
||||
- 用户表 - 用户信息、积分
|
||||
- 签到表 - 签到记录
|
||||
- 其他业务表
|
||||
|
||||
### MessageDB (SQLite + aiosqlite)
|
||||
- 消息记录表(可选)
|
||||
|
||||
### KeyvalDB (SQLite + aiosqlite)
|
||||
- 键值存储表
|
||||
- 用于配置、状态管理
|
||||
|
||||
## 配置系统
|
||||
|
||||
### main_config.toml
|
||||
|
||||
```toml
|
||||
[WechatHook]
|
||||
loader-dll = "libs/Loader.dll"
|
||||
helper-dll = "libs/Helper.dll"
|
||||
|
||||
[Bot]
|
||||
version = "v1.0.0"
|
||||
admins = ["admin_wxid"]
|
||||
disabled-plugins = []
|
||||
timezone = "Asia/Shanghai"
|
||||
|
||||
# 消息过滤
|
||||
ignore-mode = "None" # None/Whitelist/Blacklist
|
||||
whitelist = []
|
||||
blacklist = []
|
||||
|
||||
[Database]
|
||||
xybot-db = "sqlite:///database/hookbot.db"
|
||||
message-db = "sqlite+aiosqlite:///database/message.db"
|
||||
keyval-db = "sqlite+aiosqlite:///database/keyval.db"
|
||||
|
||||
[WebUI]
|
||||
admin-username = "admin"
|
||||
admin-password = "admin123"
|
||||
session-timeout = 30
|
||||
```
|
||||
|
||||
## 与 XYBot 的对比
|
||||
|
||||
| 特性 | XYBot | WechatHookBot |
|
||||
|------|-------|---------------|
|
||||
| 底层技术 | 协议实现 | DLL Hook |
|
||||
| 登录方式 | 二维码/唤醒 | 无需登录 |
|
||||
| 依赖 | Redis | 无 |
|
||||
| 消息接收 | sync_message 轮询 | Socket 回调 |
|
||||
| 插件系统 | ✅ | ✅ 完全兼容 |
|
||||
| 风控风险 | 中 | 高 |
|
||||
| 多开支持 | 需多实例 | 原生支持 |
|
||||
| Python 版本 | 3.11 | 3.x (32位) |
|
||||
|
||||
## 优势
|
||||
|
||||
1. **架构更简单**:无需 Redis,减少依赖
|
||||
2. **无需登录**:Hook 已登录微信,省去登录流程
|
||||
3. **实时性更好**:Socket 回调,无需轮询
|
||||
4. **代码复用**:80% 代码可复用 XYBot
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **32位限制**:DLL 是 32位,必须使用 32位 Python
|
||||
2. **风控风险**:Hook 方式风控风险较高
|
||||
3. **依赖微信**:必须有微信客户端在运行
|
||||
4. **杀软拦截**:DLL 可能被杀毒软件拦截
|
||||
|
||||
## 开发路线
|
||||
|
||||
### 第一阶段:基础框架
|
||||
- [ ] WechatHook 层实现
|
||||
- [ ] HookBot 核心类
|
||||
- [ ] 消息类型映射
|
||||
- [ ] 基础 API 封装
|
||||
|
||||
### 第二阶段:插件系统
|
||||
- [ ] 复用 XYBot 插件系统
|
||||
- [ ] 适配消息格式
|
||||
- [ ] 测试插件兼容性
|
||||
|
||||
### 第三阶段:完善功能
|
||||
- [ ] 数据库集成
|
||||
- [ ] 配置系统
|
||||
- [ ] 日志系统
|
||||
- [ ] 错误处理
|
||||
|
||||
### 第四阶段:WebUI(可选)
|
||||
- [ ] 复用 XYBot WebUI
|
||||
- [ ] 适配 Hook API
|
||||
- [ ] 实时监控界面
|
||||
Reference in New Issue
Block a user