一个人格,两个平台
人格在 Discord 和 QQ 上是同一个人:同一份性格、同一份记忆,知道每句话从哪个平台、哪个群、谁的私聊来。告诉它两个号是同一个人以后,它在两边认得他,私聊也接得上。
一个人,多一个说话的地方
QQ 那边的消息先变成和 Discord 一样的样子,交给同一条处理的路:它怎么想、记什么、怎么回,在两个平台上一模一样。每句话它都知道来自哪里:哪个平台、私聊还是哪个群。
认成同一个人
没告诉它之前,QQ 上的一个号就是另一个人。你在后台把这个 QQ 号和他的 Discord 账号认成同一个人以后(1.7):
- 关于他的记忆、你们的关系,两边打通;
- 他在两边的私聊算同一段:聊天记录、摘要、聊到哪了,都是一份;
- 它回话,回到他刚说话的那个平台;
- 主动找他时,如果他那边的 QQ 断了,它会改去 Discord 的私聊找他。
你自己不用一对一对地认:「所有者 · Discord 用户编号」「所有者 · QQ 号」都填上,这两个号就自动认成你(只填 QQ 号不够,它要知道认到哪个 Discord 号上)。
两边不一样的地方
它知道各个平台能做什么、不能做什么,不会在 QQ 上做 QQ 做不到的事:
- QQ 上发出去的消息不能改,群里看不到「正在输入」;
- QQ 没有子区、斜杠命令,也不做 Discord 那些服务器管理;
- QQ 群里的表情回应只能用 QQ 自己的表情。
断线、刚进群
QQ 断线重连、电脑睡醒以后,它把断线那段时间的消息拉回来补看;第一次进一个白名单里的群,先看一眼最近的聊天当背景,不急着开口(2.22)。
对应的代码
- 平台层:
src/aeria/platform_bridge.py(认人、认群、私聊合并、补课、给模型的平台事实、能力降级);QQ 适配器:src/aeria/qq_bridge.py;OneBot 客户端:src/aeria_platforms/onebot.py。 - 认成同一个人:
QQConfig.links;所有者的 QQ 号:IdentityConfig.owner_qq_ids。 - 私聊的记忆空间:
src/aeria/private_chats.py。 - 换个地方找:
src/aeria/bot.py的_reach_elsewhere。 - 测试:
tests/test_qq_access.py、tests/test_reach_elsewhere.py、tests/test_private_chats.py。
没做到的
- 只接了 Discord 和 QQ。
- QQ 只走 NapCat(OneBot v11),没接 QQ 官方的机器人平台。
- 一个人格在 QQ 上要一个号、一个 NapCat;Aeria 还不能替你装和托管 NapCat。