Skip to content

Add qq-bot: native Linux QQ + NapCat component - #86

Merged
greyoak111 merged 2 commits into
mainfrom
comp/qq-bot
Nov 11, 2026
Merged

greyoak111 merged 2 commits into
mainfrom
comp/qq-bot

Conversation

@greyoak111

@greyoak111 greyoak111 commented Nov 11, 2026 •

Copy link
Copy Markdown
Owner

组件 / Component

  • id: qq-bot
  • 上游 / Upstream: Linux QQ 3.2.34-53644 (Tencent) + NapCat 4.18.42 (NapNeko/NapCatQQ)
  • 许可证 / License: Apache-2.0(组件脚本;QQ / NapCat / Debian 运行库由用户在首次运行时下载,许可见 usr/share/cccodroid/components/qq-bot/lib/NOTICE)
  • 主页 / Homepage: https://github.com/NapNeko/NapCatQQ

What

在手机上原生跑 Linux QQ + NapCat,不使用 proot、不需要 root:

  • QQ 跑在 bionic Xvfb 的虚拟显示里,NapCat 注入后提供 OneBot v11。
  • Debian trixie 的 GTK3/NSS/ALSA/GBM 等运行库装在组件数据目录,用底座 glibc 2.44 加载。
  • QQ 的 ELF 解释器用 patchelf 指到 $PREFIX/glibc/lib/ld-linux-aarch64.so.1;否则
    /proc/self/exe 指向加载器,Chromium 找不到 icudtl.dat 就退出。
  • Xvfb 用 Termux x11 仓库的 bionic 版(socket 在 $PREFIX 下的 tmp);QQ 用的 Debian
    libxcb 写死了系统临时目录,所以加一个只监听 127.0.0.1 的 TCP→Unix 代理。
  • 附一个 OneBot v11 → OpenAI 兼容接口的桥:默认白名单为空,群聊只在 @ 机器人时回复,
    系统提示明确要求 AI 身份,没有主动发言、人格仿真或批量操作。

常用命令:

qq-bot setup --check     # 只报体积/来源,不下载
qq-bot setup --yes       # 用户确认后安装
qq-bot start             # 起 Xvfb / QQ / NapCat / 桥,打印扫码页
qq-bot status / whoami
qq-bot allow add <QQ号>  # 放行私聊
qq-bot allow add-group <群号>
qq-bot doctor

与原教程的差异

原教程(DSHA + proot Ubuntu)用 NapCat + qq-bridge + DSH。这里保留 NapCat,后半段换了:

  • 不装 proot、不装 Ubuntu;QQ 直接跑在安卓上。
  • 不用 qq-bridge:上游已宣布 2026-11-18 归档,当前版本依赖 SnowLuma 与 DSH,cccodroid
    没有这些。组件自带的桥只做白名单会话问答,走任意 OpenAI 兼容接口(默认 DeepSeek)。
  • 模型密钥由用户自己写进本地 0600 文件,组件不读取、不打印、不转发。

体积与共用包 / Size and sharing

组件本身:

  • 下载 2.5 MB · 装后 11.1 MB · 15 个包(Xvfb 及其依赖;Node/Python/patchelf/glibc 由底座提供)

首次运行由用户确认后下载:

  • Debian trixie 运行库 150 个包:约 74 MB 下载 / 334 MB 解开
  • Linux QQ 3.2.34-53644:198 MB / 646 MB(腾讯官方 CDN,SHA256 钉死)
  • NapCat 4.18.42:34 MB / 约 112 MB(GitHub Release,SHA256 钉死)
  • 合计约 307 MB 下载 / 1.09 GB 装后

和别的组件共用的包:godot(libxinerama、xkeyboard-config)、libreoffice(libuuid、
libxinerama、opengl)、music(libuuid)。

Tested

在 HONOR Magic V6 / Android 17 上完整跑过 qq-bot setup --yes(158 秒,150 个 Debian 包 +
QQ + NapCat),随后:

  • Xvfb :100 启动,X 代理 127.0.0.1:6100 通,QQ 用改过的解释器正常启动;
  • NapCat 4.18.42 加载成功,生成 cache/qrcode.png,扫码页能取到二维码;
  • qq-bot stop 能清掉 supervisor / QQ / Xvfb;杀掉 QQ 后 supervisor 会自动重启;
  • 桥用本地 mock OneBot WS + mock OpenAI 接口跑通:白名单过滤、群聊仅 @、Markdown
    清理、send_private_msg 带 token,全部通过;
  • qq-bot selftest 本机通过:
===== 总结 ===== qq-bot=OK Xvfb=OK bridge=PASS

没有完成真实 QQ 账号扫码登录(需要用户自己的手机扫码),因此 NapCat 登录后的
OneBot 3000/3001 实际收发还没有在真机上走过;桥的 OneBot 侧用 mock 验证。建议合并后
由有账号的维护者补一次真机登录与收发记录。

本地构建与审计(devkit-2026.10.28):0 错;🟡 警告为 shebang 走 termux-exec、
底座与仓库版本漂移、额外 x11 仓库、9 个自带脚本、与其它组件共用 X 库。

许可与风险

  • 组件脚本 Apache-2.0。
  • Linux QQ 是腾讯的闭源免费客户端(deb 的 License 字段为 unknown),组件不打包、
    不再分发,只在用户确认后从腾讯官方地址下载;使用受腾讯服务条款约束。
  • NapCat 是上游 Limited Redistribution License(允许带全文再分发、限非商业);安装器
    会把上游 LICENSE 保存为 LICENSE.NapCat。组件不修改 NapCat 本体。
  • 使用非官方客户端可能导致账号被限制;skill 已写明只用在自己知情、同意的会话,
    不做批量注册/养号/刷评论/冒充真人/未经邀请的群发。

检查 / Checklist

  • node tools/check-recipes.mjs 通过 / passes
  • ci-build.mjs --dry 依赖都能解 / resolves (also built for devkit-2026.10.28)
  • 读过组件编写规则 / read the authoring rules
  • 描述与 skill 里的版本、能力以实际打进包的为准 / description and skill match what is packaged
  • 看过审计报告 / read the audit report (0 errors; warnings above)
  • 第一次运行要下载的:skill 里写明大小与来源、先问用户 / first-run downloads disclosed and ask first
  • SKILL.md 不会让 Claude 读取或打印令牌、密码 / never reads or prints secrets (key is user-created 0600 file; config redacts token)
  • 对外发布、删除类操作写明先问用户 / asks before public or destructive actions (logs may contain chat content; deleting data)
  • needs 如实填写 / filled honestly (shizuku, display, gpu all false)
  • 不涉及反代、共享或转售账户、破甲、批量操控账号 / not for reverse proxies, shared accounts, jailbreaking or mass-controlled accounts

真机测试 / Device test

  • node tools/verify-device.mjs 全过,记录另开 PR 进 verified.json / not run yet; needs a real QQ scan
  • 设备 / Device: HONOR Magic V6 / Android 17 (manual setup + QR verified; login pending)
  • cccodroid 版本 / version: devkit-2026.10.28

🤖 Generated with Claude Code

合并前补的 / Added before merge

  • 免责声明:写进 NOTICE(中英)、组件描述(短版)和 skill。skill 要求 Claude 在第一次 setup 前原文转告、取得用户明确同意:非官方、与腾讯无关;可能违反 QQ 服务协议,账号有被限制或封禁的风险,后果自负,建议用小号;机器人发出的内容由使用者负责;不得批量、刷屏、冒充真人;按现状提供、不作担保。/ Disclaimer added to NOTICE, the description and the skill (relayed verbatim before first setup).
  • qq-bot start 起 supervisor 前去掉 cccodroid 的运行标记,停止那一轮对话或网关重启时不再被清掉。/ The supervisor now starts without cccodroid's run marks.

Runs Linux QQ and NapCat natively on cccodroid without proot or root:
bionic Xvfb + loopback X proxy + Debian GTK3 root via the glibc runtime,
with QQ's interpreter pointing at the bundled glibc loader. The component
ships scripts only; QQ and NapCat are downloaded on first run after user
consent, from their official sources, with pinned SHA256.

The bridge is a small OneBot v11 -> OpenAI-compatible client with empty
default allow-lists, group replies only on @, explicit AI identity, and
no proactive/persona/mass-account behaviour.

Co-Authored-By: Claude Code <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

组件审计报告

底座 devkit-2026.10.28(3768afcf79a7)· 规则见 tools/audit.mjs 开头。🟢 看报告即可 · 🟡 要读脚本和 skill · 🔴 要逐行审

🟡 qq-bot 3.2.34-r1

下载 2.5 MB · 装后 11.1 MB · 742 个文件 · 15 个包 (第一次发布)

  • ⚠️ 2 个脚本的 shebang 不在本应用前缀下(靠 termux-exec 改写):usr/bin/qq-bot → /usr/bin/env、usr/share/cccodroid/components/qq-bot/lib/install.py → /usr/bin/env
  • ⚠️ 底座与仓库版本不同(组件按底座的版本用): ca-certificates 1:2026.10.20-1→1:2026.11.05-1, libexpat 2.9.0→2.10.0, libiconv 1.19→1.19.1, libicu 78.3→79.1, libsqlite 3.54.1→3.54.1-1, mesa 26.2.5→26.2.6, nodejs 26.12.1→26.13.0-1, patchelf 0.19.2→0.19.3, python 3.14.8→3.14.10, vulkan-loader-generic 1.4.366→1.4.368, zlib 1.3.2→1.4
  • ✅ 不会盖掉底座的文件
  • ✅ 13 个 ELF 检查过
  • ✅ 每个 ELF 要的库都找得到
  • ✅ bin 入口与 selftest 命令都在

人要看的:

  • 🟡 配方自带文件 9 个:usr/bin/qq-bot、usr/share/cccodroid/components/qq-bot/lib/cli.mjs、usr/share/cccodroid/components/qq-bot/lib/paths.mjs、usr/share/cccodroid/components/qq-bot/lib/config.mjs、usr/share/cccodroid/components/qq-bot/lib/supervisor.mjs、usr/share/cccodroid/components/qq-bot/lib/bridge.mjs、usr/share/cccodroid/components/qq-bot/lib/selftest.mjs、usr/share/cccodroid/components/qq-bot/lib/install.py、usr/share/cccodroid/components/qq-bot/lib/NOTICE
  • 🟡 用了额外仓库:x11

和别的组件共用的包:godot:libxinerama, xkeyboard-config;libreoffice:libuuid, libxinerama, opengl;music:libuuid

包清单
包 版本 下载
libfontenc 1.1.9 0.0 MB
libice 1.1.2-1 0.1 MB
libsm 1.2.6-1 0.0 MB
libuuid 2.42.4 0.0 MB
libxfont2 2.0.9 0.1 MB
libxinerama 1.1.6 0.0 MB
libxkbfile 1.2.0 0.1 MB
libxmu 1.3.1 0.1 MB
libxt 1.3.1-1 0.5 MB
opengl 4.5 0.0 MB
xkeyboard-config 2.49 0.3 MB
xorg-protocol-txt 21.1.25-1 0.0 MB
xorg-server-xvfb 21.1.25-1 0.6 MB
xorg-xauth 1.1.5 0.0 MB
xorg-xkbcomp 1.5.0 0.1 MB

CI 实跑 selftest(arm64 + termux-docker)

组件 结果 说明
qq-bot ✅ 退出码 0;最后一行:===== 总结 ===== qq-bot=OK Xvfb=OK bridge=PASS

环境同 App 里 Claude 的 Bash 工具(PREFIX / HOME / TMPDIR / termux-exec),没有 GPU、屏幕、Shizuku。通过只说明「装得上、跑得起来」,安卓特有的问题仍要真机。

- Disclaimer (zh/en) in NOTICE, a short version in the description, and a
  skill section Claude must relay verbatim and get explicit consent for
  before the first setup: unofficial and not affiliated with Tencent,
  may breach QQ's terms, account restriction/ban risk is the user's,
  the user is responsible for what the bot sends, no mass/spam use,
  provided as is.
- `qq-bot start` drops CCAPP_RUN / CCAPP_RUN_ID / CLAUDECODE /
  CLAUDE_CODE_ENTRYPOINT before spawning the supervisor, so cccodroid no
  longer kills the bot when the Claude turn that started it is stopped
  (0.6.17) or the gateway restarts. Same as openai-bridge's start-bridge.sh.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@greyoak111
greyoak111 merged commit d9defcd into main Nov 11, 2026
4 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants