返回项目列表

NanoClaw NapCat QQ:为 NanoClaw v2 接入 QQ 渠道

已发布
TypeScript / NanoClaw / NapCat / OneBot v11 / WebSocket / Docker

基于 TypeScript 与 OneBot v11 反向 WebSocket,为 NanoClaw v2 接入 QQ 私聊、群聊和图文消息,并提供 NapCat Docker 自动安装与宿主渠道集成。

NanoClaw NapCat QQ:为 NanoClaw v2 接入 QQ 渠道

项目概览#

NanoClaw NapCat QQ 是我为 NanoClaw v2 开发的 QQ 渠道适配项目。它通过 NapCat 提供的 OneBot v11 接口,将 QQ 消息转换为 NanoClaw 的统一消息格式,让用户可以在私聊或群聊中与 agent 交互,并与已有的微信渠道同时使用。

项目已开源发布,目前处于公开测试阶段,采用源码安装方式,尚未发布 npm 包。

解决的问题#

接入一个聊天平台,需要同时处理消息协议、会话标识、触发规则、附件和连接状态。仅仅打通文字收发,还不足以让 agent 在日常聊天中稳定工作。

这个项目围绕 QQ 渠道完成了两部分工作:一是实现 NanoClaw 原生渠道适配器,衔接消息收发和交互回调;二是提供安装脚本,将 NapCat 容器部署、连接配置和宿主集成串起来,减少手工配置步骤。

主要功能#

私聊与群聊接入#

支持 QQ 私聊和群聊消息,分别使用 private:<QQ号> 与 group:<群号> 标识会话。私聊与群聊沿用 NanoClaw 的渠道访问规则,未知发送者采用严格策略;群聊以真正 @ 机器人作为触发条件。

安装时可以将个人 QQ 绑定到指定 agent,并授予普通成员访问权限。群聊需要单独绑定,避免把机器人加入群聊后就直接开放访问。

图文消息与引用上下文#

将 OneBot 消息段转换为 NanoClaw 的文字、图片附件和引用信息,并把 agent 的输出转换回 QQ 消息:

  • 识别文字、@、图片与引用消息。
  • 下载并校验入站图片,支持 PNG、JPEG、GIF 和 WebP,限制单张图片大小为 20 MiB。
  • 通过 get_msg 补充被引用消息的发送者和文字;查询失败时保留引用 ID。
  • 图片读取失败时保留“图片不可用”提示,使同条消息的文字仍可继续处理。

文字选项交互#

将 NanoClaw 的选项问题转为带编号的文字消息,用户通过 /nc-answer <问题ID> <选项序号> 回复,再由适配器回传对应选项及会话信息。

对于卡片内容,优先使用文字回退。由于 OneBot 不提供文字消息编辑接口,终态更新会作为新消息发送。

自动安装与部署#

提供 setup 脚本,自动部署 NapCat Docker、生成连接配置并安装宿主渠道。已有 NapCat 的用户可以选择外部实例模式,复用现有部署。

NapCat 的登录状态和配置保存在宿主的 data/napcat/ 下。WebUI 默认仅允许本机访问;远程部署可以通过 SSH 端口转发完成扫码登录。项目同时提供中英文 README、环境变量示例与卸载说明。

技术实现#

整体消息链路如下:

QQ 私聊 / 群聊
↕
NapCat
↕ OneBot v11 反向 WebSocket
NanoClaw QQ 渠道适配器
↕
NanoClaw v2 agent

适配器使用 TypeScript 编写,按注册入口、连接管理和消息转换拆分职责:

模块职责
src/channels/napcat.ts注册 qq 渠道,读取并校验环境配置
src/channels/napcat/adapter.ts实现渠道生命周期、消息收发、入站队列与选项回调
src/channels/napcat/connection.ts管理反向 WebSocket、鉴权、心跳与 API 请求响应
src/channels/napcat/messages.ts转换消息段、处理引用、下载并校验图片
scripts/setup.mjs编排 NapCat 部署与宿主安装
scripts/channel.mjs安装和卸载渠道代码

连接与消息处理#

连接建立时校验 Bearer Token、机器人 QQ 号和客户端角色,并通过 get_login_info 再次确认账号。API 调用使用独立的 echo 关联请求与响应,待处理请求绑定到具体 WebSocket;连接断开或被替换时及时拒绝请求,避免旧连接的响应混入新会话。

入站消息按队列串行处理,设置队列长度上限,并在有限时间窗口内去重。连接层通过心跳检查存活状态,消息层则为图片下载设置超时、重定向次数和大小限制,控制异常消息带来的资源消耗。

使用方式#

运行前需要可用的 NanoClaw v2、Node.js 22 或更高版本、宿主使用的包管理器,以及 Linux Docker Compose。

Terminal window
git clone https://github.com/xqcherry/nanoclaw-channel-napcat.git
cd nanoclaw-channel-napcat
npm ci --ignore-scripts
npm run setup -- --target /absolute/path/to/nanoclaw

随后在本机 NapCat WebUI 中扫码登录机器人 QQ,并按照仓库说明绑定个人 QQ 与目标 agent。部署参数及卸载步骤以 项目 README 为准。

项目状态#

项目已发布,当前为公开测试版本,支持单个 QQ 账号,暂不支持语音、文件及群管理。

这次项目经历覆盖了聊天协议适配、WebSocket 连接生命周期、图文消息转换、渠道权限衔接和容器部署自动化,将 QQ 到 agent 的消息链路与实际安装流程一起落地。