8.2 KiB
8.2 KiB
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 函数封装
class NoveLoader:
- InitWeChatSocket() # 初始化回调
- InjectWeChat() # 注入微信
- SendWeChatData() # 发送数据
- DestroyWeChat() # 销毁连接
WechatHookClient - API 封装
class WechatHookClient:
- send_text() # 发送文本
- send_image() # 发送图片
- send_file() # 发送文件
- get_friend_list() # 获取好友列表
- get_chatroom_list() # 获取群聊列表
- add_friend() # 添加好友
# ... 更多 API
2. Bot 核心层
HookBot - 消息处理核心
class HookBot:
- process_message() # 处理消息
- _normalize_message() # 统一消息格式
- _filter_message() # 白名单/黑名单过滤
EventManager - 事件管理(复用 XYBot)
class EventManager:
- bind_instance() # 绑定插件实例
- emit() # 触发事件
- unbind_instance() # 解绑实例
3. 插件层
PluginBase - 插件基类(复用 XYBot)
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 值映射到内部事件类型:
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
[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位) |
优势
- 架构更简单:无需 Redis,减少依赖
- 无需登录:Hook 已登录微信,省去登录流程
- 实时性更好:Socket 回调,无需轮询
- 代码复用:80% 代码可复用 XYBot
注意事项
- 32位限制:DLL 是 32位,必须使用 32位 Python
- 风控风险:Hook 方式风控风险较高
- 依赖微信:必须有微信客户端在运行
- 杀软拦截:DLL 可能被杀毒软件拦截
开发路线
第一阶段:基础框架
- WechatHook 层实现
- HookBot 核心类
- 消息类型映射
- 基础 API 封装
第二阶段:插件系统
- 复用 XYBot 插件系统
- 适配消息格式
- 测试插件兼容性
第三阶段:完善功能
- 数据库集成
- 配置系统
- 日志系统
- 错误处理
第四阶段:WebUI(可选)
- 复用 XYBot WebUI
- 适配 Hook API
- 实时监控界面