OpenQQ Bridge 是用于 SeaDice 与 OpenQQ 身份兼容的数据桥接工具。 用于解决 OpenQQ 平台身份变化后, 原有角色卡、属性数据以及日志数据无法直接读取的问题。 支持旧 QQ 数据绑定到当前 OpenQQ 身份, 实现数据兼容读取。
本版支持:
如果下载后无法打开, 或者打开后立即关闭, 请检查 Windows 安全中心和防火墙是否允许该软件运行。 大概率是被防火墙拦截。
注意: - 插件配置中的“SMTP授权码”不是邮箱登录密码。 - QQ邮箱通常使用 smtp.qq.com:465,并使用 SMTP 授权码。 - 测试邮件会发送到你填写的“发件邮箱”本身。 - bridge_port.txt 与 EXE 放在同步桥目录中;EXE 默认读取其中的端口。 - email_config.json 仅作为兼容/手工启动备用配置,本版正常使用时由 SeaDice 插件配置向 Bridge 临时下发邮箱配置。
验证码是桥用你填的「发件邮箱」发出去的,所以这个邮箱必须先开通 SMTP 并生成授权码。 授权码属于【发件邮箱】,收验证码的 旧QQ号@qq.com 什么都不用设置。
1. 电脑浏览器打开 https://mail.qq.com ,登录你要当发件箱的 QQ 邮箱 2. 左上角 设置 → 账号(有的版本叫「账户」) 3. 往下找到「POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务」 4. 在「IMAP/SMTP服务」那一行点【开启】(开 POP3/SMTP 也行,两个开一个就够) 5. 按提示用绑定手机发一条短信,发完点「我已发送」 6. 通过后会显示一串 16 位授权码,形如 abcd efgh ijkl mnop,只显示这一次,先复制下来 7. 回到插件配置填写:
发件邮箱 → 你刚才登录的那个邮箱,如 123456@qq.com SMTP授权码 → 那 16 位,【去掉空格】,变成 abcdefghijklmnop SMTP服务器 → smtp.qq.com(不用改) SMTP端口 → 465(不用改)
8. 保存后在群里发 .旧QQ邮箱测试 ,能收到测试邮件就说明配好了。
容易踩的坑:填成 QQ 登录密码一定失败;授权码里的空格要去掉;忘了授权码可以回到第 4 步点「生成授权码」重新生成(旧的会失效);改过 QQ 密码后授权码通常也会失效;同一个发件邮箱可以给多个海豹实例共用;收不到邮件时让对方检查 QQ 邮箱的「设置 → 反垃圾」,必要时把发件邮箱加进白名单。
绑定成功后会自动开启定时同步(每 10 分钟一次),不再只是一次性复制。
相关指令:
注意:增量同步无法处理删除——旧群里删掉一条消息,另一边不会跟着删。 并且要求旧群数据仍在同一个海豹库里(桥只读数据库文件,不连服务器)。
修复了迁移后角色卡面板显示为空的问题。之前版本会清空"指向他人角色卡"的绑定, 但海豹允许同群共享角色卡,绑定被清空后面板就没东西显示了。 v3.0 改为保留原绑定。数据本身一直没有丢失。
旧版海豹在某些 Windows 环境下,会把中文按 GBK 编码写进数据库。 桥读取时默认按严格 UTF-8 解码,遇到这种数据会直接报错:
sqlite3.OperationalError: Could not decode to UTF-8 column 'name' with text 'Bryana Marist (?????).st ...'
表现为绑定直接失败、返回 500。现在所有数据库连接都改用了容错解码, 顺序是 UTF-8 → GB18030 → GBK → Big5 → latin-1,最后才做字符替换。 像「Bryana Marist (测试角色).st 力量65str65...」这种角色名, 现在能完整读出,中文和属性数值都不会丢。
影响范围:绑定、角色查询、增量同步全部覆盖, 不再因为个别历史数据卡死整个流程。
绑定身份从「旧QQ + 旧群」改为「旧QQ + 旧群 + OpenQQ账号 + 目标群」。这样一来,同一个旧 QQ 可以绑到多个不同的 OpenQQ 官 bot,而完全相同的配对再次绑定会被拒绝。
qq222 -> openqq444 允许 qq222 -> openqq555 允许(同一个旧QQ,不同官 bot) qq222 -> openqq444 再绑 拒绝 qq233 -> openqq444 允许
旧版本留下的记录仍能识别,不会因为升级而允许重复绑定;下次成功绑定时会自动整理成新格式。
3.4.1 是在更早版本上做的,回退了 v3.4 里的三处修复。3.5 把它们补回来,并加固了一处原子性隐患。
1. 恢复首次快照生成(.snapshot-first.bak) 3.4.1 的增量同步只写会滚动清理的临时备份,没有长期基线可回滚。 2. data.db 与 data-logs.db 相互独立 缺一个不再连累另一个;日志同步失败只记日志,角色卡/PC 照常同步。 3. 备份失败不再阻断同步 磁盘临时不可写时,不再让所有群一起停摆。 4. 兜底覆盖改为两段式(本版新增) 3.4.1 重试失败后会直接截断覆盖目标文件, 进程写一半被杀就是半个 JSON、绑定记录全丢。 现在改为「先备份 -> 写临时文件 -> 校验字节数 -> 失败回滚」。
一个海豹同时挂多个官方 QQ 机器人(多个群)时,如果几个群几乎同时完成绑定,后台同步线程会把刚登记的同步关系覆盖掉。表现是「绑定时提示成功,但那个群之后再也没自动同步过」。
根本原因在 sync_all():它先读一份配置,跑完所有群的同步后再把整份配置写回。期间别处新增的配对就丢了。
旧写法:pairs = load(); ...跑很久... save(pairs) 新写法:pairs = load(); ...跑很久... 按 key 合并回最新配置
同时修掉两个相关问题:sync_config.json 并发写入会在 Windows 上报 PermissionError 并留下 .tmp 垃圾文件;每轮同步都对数据库做全量快照,多官bot时磁盘 IO 被放大几十倍(data-logs.db 常有几百 MB)。现在同一文件 600 秒内最多备份一次,首次快照仍会保留,绑定路径也仍然每次都备份。
验证方式:4 个官 bot x 5 个群、并发 8 个同步线程跑 12 轮,同时并发新增 60 条同步关系,最终 80/80 条全部保留、0 异常、0 残留临时文件。
桥在 lookup() 里用了 with self.connect(...)。但 Python 的 sqlite3 中,with 语句只提交事务,并不会关闭连接,于是每次查询都会泄漏一个连接。这些连接一直持有读事务,阻塞海豹的 WAL checkpoint。
with self.connect(self.db_path) as con:
...
结果 -wal 文件持续膨胀(实测有实例涨到主库的 11 倍),每次读库都要扫越来越大的 WAL。表现为海豹的 database.log 里不断出现 1~4 秒的 SLOW SQL,机器人回复变慢,偶发因为超过 QQ 被动回复窗口而发不出消息。
现在改为显式关闭:
con = self.connect(self.db_path)
try:
...
finally:
con.close()
升级后建议重启一次海豹,让已经膨胀的 -wal 立即回收。
使用方式: 双击启动openqq.exe,然后保持运行,不能关闭
在目标QQ 群执行: 如 .旧QQ绑定 2522629086 1081354778,也就是格式是: .旧QQ绑定 <本账号QQ><本QQ群账号>,后bot会朝你使用账号的QQ号@qq.com发送验证码邮件,输入 .旧QQ验证码+6位数字 即可完成绑定。 同一个旧QQ可以分别绑到多个不同的OpenQQ账号,不用先解绑;只有完全相同的组合重复绑定才会失败。 QQ号+群号可用于多群进行绑定查询log。
绑定完成后再执行: .st或者。pc或者。log,先前的log可通过log get+名字取出。
不要在干净备份上直接测试 .st;干净备份里的角色仍属于旧 QQ,OpenQQ 官 bot 不会自动显示它。
TIPS:因为文件只读取海豹的data和datalog的db文件,所以有的角色卡可能会在转换以后出现丢失情况,比如出现空角色卡,或者log绑定失败,大部分是因为数据库出现了问题,可用原始备份的data和datalog的db文件进行替换再删除相应的后缀为wal和shm的文件,海豹再度启动会自动生成相应的wal和shm干净文件。data文件会在数据转换前进行备份,后缀是beforexxxx
如十分必要可以来找骰主尝试找回数据。把data和datalog整理读取后可以得到对应的角色卡文件,只要存在过。
这版插件是AI写的代码,不能保证不会出现其他的bug,除此以外,尚未验证过该插件同步的log数据是否能继续记录日志。
留言