NapCatQQ 上手指南:基于 NTQQ 的 OneBot 11 机器人框架,从启动到接群管 Bot
NapCatQQ 上手指南:基于 NTQQ 的 OneBot 11 机器人框架,从启动到接群管 Bot
【免费下载链接】NapCatQQModern protocol-side framework based on NTQQ项目地址: https://gitcode.com/gh_mirrors/na/NapCatQQ
NapCatQQ 是一个跑在 Windows 上的 QQ 机器人框架:它把 NapCat 注入 NTQQ 进程,让一个真实 QQ 号以"无头"方式运行,并对外暴露标准的 OneBot 11 接口和内置 WebUI。适合想在服务器或自己电脑上长期挂一个机器人、又不想从零写 QQ 协议的开发者。它解决的三件事很具体——用 HTTP/WebSocket 收发 QQ 消息、调用群管与文件 API、用 WebUI 登录和管理机器人。本文按"先跑起来,再会用接口,最后看原理"的顺序展开。
第一次运行:装好、启动、验证登录
环境要求
| 项目 | 要求 |
|---|---|
| 系统 | Windows(框架注入 NTQQ 进程,依赖其 Windows 壳) |
| NTQQ | 已安装,启动脚本会从注册表自动定位安装路径 |
| Node.js | ≥ 18(packages/napcat-develop/package.json 中 engines 指定) |
| 包管理 | pnpm(仓库为 pnpm workspace 多包结构) |
安装与启动
git clone https://gitcode.com/gh_mirrors/na/NapCatQQ cd NapCatQQ pnpm install之后运行 packages/napcat-shell-loader/ 里的launcher.bat:它会自动从注册表找到 NTQQ 安装路径(读UninstallString),注入NapCatWinBootHook.dll并拉起NapCatWinBootMain.exe。脚本要求管理员权限,检测到非管理员时会自动请求提权。
"跑通了"的三个验证标志
- 浏览器访问 WebUI,默认地址
http://127.0.0.1:6099(packages/napcat-webui-backend/webui.json 中port: 6099)。token 默认是random,启动日志里也会打印当前实际值,访问时带上。 - 在 WebUI 里用目标 QQ 号扫码登录,页面显示在线状态。
- 通过 OneBot HTTP 接口调
get_login_info返回该 QQ 号,调get_status返回online——此时机器人已经可以对外服务了。
消息收发:OneBot 11 接口怎么用
NapCat 对外的接口主体是 OneBot 11,所有接口实现在 packages/napcat-onebot/action/,事件定义在 packages/napcat-onebot/event/。你的业务侧只需通过 HTTP POST 或 WebSocket 调用,不用关心底层实现。
发消息
send_private_msg:私聊,参数user_id+messagesend_group_msg:群聊,参数group_id+messagesend_msg:通用发送,按message_type自动区分私聊/群聊
message支持 CQ 码字符串或 segment 数组,覆盖 text、image(本地文件/url/文件 id)、record(语音)、video、file、face、reply、forward(合并转发)等类型。常用配套接口:get_msg按 message_id 查原消息、send_forward_msg合并转发、delete_msg撤回/删除。
收消息与事件订阅
事件按类别分四个目录:message(消息接收)、request(好友/入群请求)、notice(群成员变动、禁言、卡片等通知)、meta(心跳、上线/下线)。
- 事件走 WebSocket Server 推送时,默认端口
3001(配置见 packages/napcat-develop/config/onebot11.json) - 你的机器人以 HTTP 形式接收事件时,则填
httpClient.url,NapCat 会 POST 过去
私聊、群聊消息事件都会带上 message_id、群号/用户 id、消息 segment,直接据此写业务逻辑即可。
群管理操作:常用接口速查
群管类接口在 packages/napcat-onebot/action/group/,覆盖"管群"场景需要的全部动作:
| 任务 | 接口 |
|---|---|
| 查群/成员 | get_group_list、get_group_info、get_group_member_list、get_group_member_info |
| 踢人/禁言 | set_group_kick、set_group_ban、set_group_whole_ban |
| 管理员/名片 | set_group_admin、set_group_card |
| 公告/精华 | send_group_notice、set_essence_msg、get_group_essence |
| 处理入群申请 | set_group_add_request(同意/拒绝/拉黑) |
| 改名/禁言名单 | set_group_name、get_group_ban_list |
权限判断逻辑建议自己写在业务层:NapCat 返回的是接口原始结果,"谁有权限执行这个动作"由你的机器人代码决定。
文件传输:群文件、私聊文件、图片语音
- 群文件:
upload_group_file上传、get_group_file_url取下载直链、get_group_root_files列目录、create_group_file_folder建目录 - 私聊文件:
upload_private_file上传并直接发给对方 - 已收到的图片/语音:
get_image、get_record把消息里的文件落到本地拿到路径 - 通用下载:
download_file
另外还有一整套基于流的分片上传/下载接口(packages/napcat-onebot/action/stream/),适合大文件场景。文件能力最终落到 packages/napcat-core/apis/file.ts 这一层实现。
配置与扩展:真正需要动的三处
WebUI 配置
packages/napcat-webui-backend/webui.json 里与日常使用相关的项:
host/port:WebUI 监听地址,默认0.0.0.0:6099,远程访问就靠这个token:访问 WebUI 的凭证,默认值random,生产环境务必改掉ipWhitelist/ipBlacklist/accessControlMode:远程部署时的访问控制
OneBot 网络配置
onebot11.json定义四组连接,默认只启用httpServer(3000,收 API 请求)和websocketServer(3001,推事件):
- 把
token留空意味着无鉴权,远程部署前建议填上 messagePostFormat控制消息以array(segment 数组)还是string(CQ 码)格式投递- 不想自建服务器而由 NapCat 主动推事件时,改配
httpClients/websocketClients即可
插件
插件目录在运行目录的config/plugins/下,NapCat 启动时扫描加载。加载器(packages/napcat-onebot/network/plugin/loader.ts)内置了官方插件白名单和敏感词扫描,WebUI 里还提供了插件市场用于安装社区插件。插件与你的业务解耦:核心消息链路靠 OneBot 接口就够了,插件更多承担"附加功能"角色。
场景落地:两个最典型的用法
场景一:群管机器人
- WebSocket 连接 NapCat(3001)监听事件,重点处理
group_message、notice(成员变动)、request(入群申请) - 收到群消息后先校验发送者权限:调用
get_group_member_info拿 member_level,普通成员无管理权限则忽略其指令 - 指令命中后调对应接口,例如
/禁言 123456调set_group_ban(group_id + user_id + duration),/踢调set_group_kick - 收到
group_request事件时,按预设规则调set_group_add_request自动同意或拒绝
整条链路只用 OneBot 接口,不需要碰 NapCat 内部代码。
场景二:消息推送机器人
把群里/好友间的关键消息推到其他群或外部系统:
- 监听
message事件,按群号或关键词过滤 - 调
send_group_msg推送到目标群;消息里带图片时先用get_image落盘再作为imagesegment 发出 - 要推给外部系统(Webhook、邮件网关)时,在事件回调里直接 HTTP 转发,NapCat 本身不做二次加工
原理速览:分层怎么摆的
launcher(napcat-shell-loader)──注入/拉起──▶ NTQQ 进程 │ napcat-framework ── 加载原生模块与框架 ──▶ napcat-core(核心 API + 事件监听 + 服务层) │ OneBot 11 适配层(HTTP / WebSocket / 插件)◀──▶ WebUI(前后端)一句话版:napcat-shell-loader负责把框架注入 NTQQ 壳;napcat-core直接驱动 QQ 的底层服务(发消息、文件、群操作都在这一层,见 packages/napcat-core/);napcat-onebot把 core 能力翻译成 OneBot 11 接口和事件;WebUI 与插件系统挂在最外层做管理界面和扩展。业务侧只需要最外两层。
常见问题
1. 启动后提示 "QQ installation was not found in the registry"原因:脚本从注册表HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\QQ读取 NTQQ 路径,找不到说明系统里没装 NTQQ 或装的是旧版 QQ。解决:安装 NTQQ 后重试;确认当前账户有权限读取该注册表项。
2. 浏览器访问 6099 被拒或 401原因:WebUI 有 token 鉴权,默认 token 为random,且实际值可能已被 WebUI 重新生成。解决:看启动日志或 WebUI 关于页拿当前 token,按提示格式拼进 URL 访问。
3. 3000/3001 端口被占用原因:OneBot 的 HTTP/WS 服务端口与其他程序冲突。解决:在onebot11.json里改掉port,或释放占用;改完重启 NapCat。
4. 登录一段时间后自动掉线原因:多数情况是 NTQQ 版本过旧,协议行为与 NapCat 内置版本(对应 9.9.x)不匹配。解决:把 NTQQ 更新到较新版本后重新登录;仍复现的话检查是否被异地风控。
5. 消息发出去了但收不到事件原因:事件只走你实际启用的通道——默认是 WebSocket Server,如果你的机器人用 HTTP 客户端模式却没配httpClients,事件不会主动推给你。解决:确认 packages/napcat-onebot/config/config.ts 中启用的通道与你业务侧的接入方式一致。
资源与社区
- 项目文档站:napneko.github.io(另有 doc.napneko.icu、napcat.top 等镜像,任选其一)
- 社区:官方 QQ 群(入群密钥在 WebUI 关于页获取)、Telegram 群 napcatqq
- 仓库内示例:packages/napcat-onebot/action/example/ 整理了各分类接口的参数示例,测试用例在 packages/napcat-test/ 可参考断言写法
【免费下载链接】NapCatQQModern protocol-side framework based on NTQQ项目地址: https://gitcode.com/gh_mirrors/na/NapCatQQ
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考