首页/更新日志

版本历史,以及历史的代价

版本号规则:0.x.0 对应里程碑 Px(0.1 = P0 … 0.8 = P7)。 下面是正经的里程碑记录;再往下,是我们认为你也应该知道的黑历史。

* 本页不含任何夸大成分,这正是它好笑的原因。永不开源,预计 2099 年开放使用——这两句也是。

Milestones

里程碑

每个版本都对应测试全绿。全绿的方式见脚注。

v0.8.5 2026-11-01 · Closed Alpha

群禁言(set_group_ban / set_group_whole_ban 经发送泵 op=kernel_call 走 ntApi IPC,真机开→关验证通过)、引用回复/表情、 多账号路由去重、账号注册表自动清理已退出 pid。测试 575 全绿。

发布当天顺手把「小版本更新」做成了重装 QQ。版本号是诚实的,操作不是。
v0.8.x P7 · OneBot v11

多账号多实例、正向 WS 服务端 + 反向 WS 客户端、数组消息段、 发送/群信息/群成员等 action。WS 为自研最小 RFC6455 实现,继续坚持仅标准库。

v0.7.x P6 · WebUI

LunaFox 总控制台:Vue 3 + Element Plus 前端 + stdlib HTTP 后端。 控制台 / 聊天调试 / Hook 管理 / OneBot 配置 / 机器人管理, 一键启动、一键注入、一键停止。

v0.4.x – v0.5.x P4 / P5 · 真实发送

hook v8 发送泵 + FileBridgeTransport:文本/图片/文件,群/私聊实测可发; P5 补上图片缩略图回退、媒体发送与发送限流。发送结果通过 hook 流回读二次确认。

「实测可发」的完整含义是:测试消息真的进了群,然后真的被撤回了。
v0.3.x P3 · 机器人框架

asyncio 事件循环、插件/命令/权限/冷却/去重,5 个内置插件。 默认 dry-run 只写 outbox,真发需要显式开启。

v0.2.x P2 · 消息规范化

统一 23 字段消息结构 + 全 element 文本化。上游千奇百怪,下游风平浪静。

v0.1.x P0 / P1 · 捕获与身份库

分段捕获、心跳、IAT 自愈、看门狗、提权代理、单实例保护; SQLite 身份库(uid ↔ uin ↔ 昵称/群名/群成员),消息 + 事件双来源学习。

Incidents

事故档案*

别的项目叫 Post-Mortem,我们叫黑历史。以下每一条都写进了文档, 以确保同一种事故只发生一次(美好的愿望)。

装错了整个 QQ

x86 版 QQ 登录一切正常,hook v10 完全不可用,排查半天。 事后用 IsWow64Process2 一看:machine=0x14c。重装 x64 后痊愈。

教训:x86 QQ 能装、能登、不能用。现在注入前会直接拒绝你。

重复注入风暴

同一 pid 被注入两次,旧 DLL 卸不掉,repatches 冲到 564, 消息流开始刷重复 msgId。诊断工具当场命中,命名为 FAIL_REPATCH_STORM,并加了护栏。

564 这个数字现在是团队内部的计量单位。「今天写了 3 个 repatch。」

静默假成功

注入返回成功、心跳在走、一切看起来都对——但 msgs 是 0。 从此 compat_check.py 把「注入成功但其实没捕获」列为一等公民诊断项。

最危险的失败不是报错,是笑着说「好了」。

9.9.36 的薛定谔状态

9.9.33-51802 已验证,9.9.36 未验证。它可能能用,也可能不能用, 在你跑 compat_check.py 之前,两者叠加存在。

升级 QQ 和拆盲盒是同一种娱乐活动。

历史不会重复,但会押韵

所以每次 QQ 升级后,请先跑 compat_check.py。它就是为此而生的。

* 事故档案不计入「575 全绿」。测试全绿和生产平安是两件事,我们分得很清。