3.6 KiB
3.6 KiB
开发日志
2025-11-12
项目初始化
- ✅ 创建 WechatHookBot 项目结构
- ✅ 从 XYBot 复制 utils 和 database 模块
- ✅ 设计技术架构文档
Hook API 集成
- ✅ 封装 NoveLoader (Loader.dll)
- ✅ 封装 WechatHookClient (API 客户端)
- ✅ 实现消息类型映射和格式转换
- ✅ 实现回调处理机制
启动调试
问题: 回调未触发,无法接收消息
- ❌ 尝试1: 调整回调注册顺序 - 失败
- ❌ 尝试2: 修改事件循环处理 - 失败
- ✅ 解决: 添加共享内存创建 (
create_shared_memory)- 关键发现: DLL 需要共享内存进行通信
- 参考官方 Demo 第 357-365 行
问题: Socket 客户端 ID 混淆
- ❌ 使用进程 ID 发送消息 - 失败
- ✅ 解决: 区分进程 ID 和 Socket 客户端 ID
InjectWeChat返回进程 ID- 回调中的
client_id是 Socket ID (通常为 1)
问题: 登录信息获取失败
- ❌ 使用 type=11028 - 错误
- ✅ 解决: 实际类型是 type=11025
- 登录信息在注入后自动推送
- 包含 wxid, nickname, account, avatar 等字段
问题: 消息类型映射错误
- ❌ 使用 10001-10013 - 错误
- ✅ 解决: 实际类型是 11046-11061
- 文本消息: 11046
- 图片消息: 11047
- 其他类型依次递增
问题: 群聊消息处理失败
- ❌ 使用
from_wxid判断群聊 - 错误 - ✅ 解决: 使用
room_wxid字段判断- 群聊消息:
room_wxid不为空 - 私聊消息:
room_wxid为空 - 消息内容字段:
msg(不是content)
- 群聊消息:
插件开发
AIChat 插件
- ✅ 支持自定义 API 配置
- ✅ 支持人设切换 (txt 文件)
- ✅ 三种触发模式: all/mention/keyword
- ✅ 群聊/私聊分别控制
问题: 插件配置未加载
- ❌ 使用
on_load方法 - 失败 - ✅ 解决: 使用
async_init方法- 插件基类只支持
async_init on_enable用于定时任务注册
- 插件基类只支持
ManagePlugin 插件
- ✅ 插件列表查看
- ✅ 热重载功能
- ✅ 启用/禁用插件
- ✅ 权限控制(管理员)
命令列表:
/插件列表- 查看所有插件状态/重载插件 <名称>- 热重载指定插件/启用插件 <名称>- 启用插件/禁用插件 <名称>- 禁用插件
依赖管理
最终依赖:
loguru==0.7.3
APScheduler==3.11.0
aiohttp==3.9.1
移除的依赖:
- SQLAlchemy (需要 C++ 编译)
- eventlet (msgspec 不支持 32 位)
- Flask (不需要 WebUI)
关键技术点
- 共享内存创建
def create_shared_memory():
kernel32 = ctypes.WinDLL('kernel32')
file_handle = kernel32.CreateFileMappingA(-1, None, 4, 0, 33,
"windows_shell_global__".encode('utf-8'))
data_address = kernel32.MapViewOfFile(file_handle, 983071, 0, 0, 0)
key = "3101b223dca7715b0154924f0eeeee20".encode('utf-8')
kernel32.RtlMoveMemory(data_address, key, len(key))
- 异步回调处理
# 在回调线程中使用事件循环
asyncio.run_coroutine_threadsafe(
self.hookbot.process_message(msg_type, data),
self.event_loop
)
- 消息格式转换
# 群聊判断
room_wxid = data.get("room_wxid", "")
if room_wxid:
message["IsGroup"] = True
message["FromWxid"] = room_wxid
message["SenderWxid"] = data.get("from_wxid", "")
测试结果
✅ 成功测试:
- 机器人启动和注入
- 登录信息获取
- 私聊消息接收
- 群聊消息接收
- ping-pong 测试
- 插件管理命令
- AI 聊天功能
下一步计划
- 完善插件功能
- 添加更多消息类型支持
- 优化错误处理
- 编写使用文档