加一个聊天平台
加一个聊天平台,是写一个适配器,不是改核心。适配器只管四件事:连上收消息、发、撤回和点表情、拉历史;认人、认群、私聊合并、断线补看、给模型的平台事实,平台层已经统一做好了。
适配器要写什么
继承 src/aeria/platform_bridge.py 的 PlatformBridge:
- 设
platform(平台名)、self_external(人格在这个平台上的号);平台能不能改已经发出去的消息,设can_edit。 async connect(stop):连上,收到消息时调await self.receive(InboundMessage(...)),连上(包括重连)以后调await self.connected()。async _send(channel, text, *, reply_to, mentions) -> str:发一条,返回平台上的消息编号。async _delete(external):撤回自己发的一条。async _react(external, emoji):点一个表情回应。- 可选:
_history(channel, count)(拉最近的消息,补看用)、_space_name(space)(群名)、_message_time(external)、is_connected()。
平台层替你做的
- 编号:平台上的号、群、频道换成内部编号(
aeria_platforms.AccountRegistry,正数段,碰不到 Discord 的编号)。 - 认人:配置里认过的号直接换成那个 Discord 账号,记忆、关系、所有者身份打通。
- 私聊合并:认过的人在这个平台上的私聊,用他在 Discord 上的私聊频道编号,是同一条对话线;回话回到他刚说话的平台。
- 补看:重连以后把断线期间的消息拉回来;第一次进名单里的群,先拉一段当背景。
- 给模型的事实:这句话来自哪个平台、私聊还是哪个群;平台做不到的事(改消息、子区、斜杠命令)不让模型去做。
- 名单:群白名单、私聊名单在这一层挡,不在名单里的消息不进流水线。
参照 QQ 的那一个
src/aeria/qq_bridge.py 是现成的例子:经过 NapCat(OneBot v11,src/aeria_platforms/onebot.py 的客户端)连 QQ,收发、撤回、表情回应、拉历史都在里面,配置在 [qq]。
新平台的配置照 QQConfig 的样子加一节,网页后台的中文名在 webui_frontend/src/lib/labels.ts 里登记(没登记的,测试会红)。
没做到的
- 现在只有 QQ 一个适配器;微信、Telegram 这些还没有。
- 平台层假设一个人格在一个平台上只有一个号;一个人格挂几个 QQ 号还不支持。
- 平台特有的富消息(卡片、语音、红包)只当成一行文字描述交给流水线。