中文EN

dsh-napcat-keeper

tools已测通过npmMIT

让 NapCat 这个 QQ 后端跟着 DSH 一起活着:启动时探测 OneBot 11 的 HTTP 端口,连不上就拉起 NapCat,之后每 45 秒复查、清掉重复的进程链、隐藏控制台窗口、可在填写任务名后创建登录计划任务,并提供设置页以及 napcat_status、napcat_restart、napcat_dedupe 三个工具。可选记住 QQ 密码(默认关闭,开启前需确认风险),让失效的快速登录令牌不用扫码也能自己续上。仅 Windows;不建计划任务时,拉起的 QQ 会随 DSH 一起退出。

下载量 / Downloads
5,344
依赖体积 / node_modules
0.39 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add dsh-napcat-keeper

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载✓
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

dsh-napcat-keeper

发现没有能够随着 DSH 打开自动启动 NapCat 的插件,遂使用大肥鱼制作此插件,建议搭配Yuuyuko-uu 的 dsh-qq-link使用~

给 NapCat(QQ 协议端)配一个看门狗:DSH 在,QQ 就在。

端口不通就拉起来,进程重复就杀掉多余的,卡在扫码就重来,扫完码以后又掉线也会自己恢复。

所有需要人填的东西都在 DSH → 设置 → napcat桥 一个页面里,保存即生效,不用重启。

常配套 dsh-qq-link(把 QQ 和 DSH 会话接通):那个负责「说话」,这个负责「别掉线」。
也可以单独用——只要你想让 NapCat 一直活着。

声明:基本纯让我家大肥鱼跑的,内容我只粗略检查了一下,本人也只是个半吊子学生,有隐性bug大概率也看不出来,这GitHub我也第一次用,之前光下别的大佬的好东西了,有大佬愿意的话欢迎随时指点我、提建议等等都行,爱你♥️

吐槽:这傻鱼写的啥readme啊,我得自己改一下。


它到底管什么

情况 · 看门狗怎么做

OneBot 端口不通、也没有 NapCat 进程 · 拉起来(默认 cscript;只有填了计划任务名才走任务)

刚拉起、端口还没通 · 给宽限期(默认 150s),期间不重复拉

拉到一半卡在扫码 · 记一笔 need-scan;超过 scanTimeoutSec 就杀掉重来,重试 maxScanRetries 次后放弃并写日志

有两条 QQ 进程链(客户端互踢的根源) · 按启动时间聚类判重,只杀晚出现的那几条,保留正在服务的那条

进程在、端口不通、也没有任何新信号 · 判为卡死,杀掉重来

一切正常 · 只记心跳(默认 10 分钟一行),并顺手检查 dsh-qq-link 的轮询是否还新鲜

看门狗自己不会把 DSH 启动搞崩:外部调用都有超时、异常都吞掉写日志、跨进程还有一把锁防止两个 DSH 实例同时拉。

前置:先把 NapCat 装好

装 NapCat.Shell(Windows 有一键安装包,会顺带装 QQ)。

装完napcat之后不用自己配置,后面插件会一件懒人配置的
等正式允许要QQ扫码的时候不用再去翻 NapCat 的 cache\qrcode.png:插件自己起了个只监听本机的小页面
(默认 http://127.0.0.1:8899/),设置页顶上那条黄横幅 / 二维码那一行的「打开扫码页」
点进去就是一张会自己刷新的码,扫完它自己变绿。换端口见下面配置表 qrPanelPort。

Requirements

dsh-market 的索引会读这一段(标题必须是英文 Requirements,否则市场校验报 README.md has no Requirements section),内容照旧中文。

项 · 要求 · 清单字段

DSH 宿主 · >= 0.2.1-rc.2(本机实测 0.2.1-rc.3) · engines.dsh

Node.js · >= 20(插件零 npm 依赖,只用 Node 内置模块) · engines.node

操作系统 · Windows(进程探测靠 Get-CimInstance、拉起与计划任务靠 schtasks / cscript) · —

NapCat · NapCat.Shell(Windows 一键包,自带 QQ 内核),装在 D:\tool\napcat 这类目录即可 · 设置页「路径前缀」

可选 · dsh-qq-link(负责把 QQ 与 DSH 会话接通;本插件只管让 NapCat 不掉线) · —

安装

DSH桌面版:设置 → 插件 → 添加插件,「包名或地址」那一栏只填包名 ——

dsh-napcat-keeper

或者填

github:waning-sun/dsh-napcat-keeper
只填包名,别把整条命令粘进去:那一栏是按「包名 / 仓库地址 / 本地目录」解析的,
多一个空格、多一个 add、多一个大写字母,就会报 无法识别这个包名或地址:not a package name the registry accepts。
顺带一提,桌面版刚装完之后 DSH 目录里并没有 dsh 命令,所以下面那条命令行不是人人都能跑 —— 用不了就走上面这条路。

命令行:

dsh plugin --profile <profile> add dsh-napcat-keeper

装完重启一次 DSH(第一次装载才生效),然后去 设置 → napcat桥。

首次配置:其实就三个空

填什么 · 说明

NapCat Shell 目录 · 用「分盘扫描」找:NapCat 装哪块盘就点哪块,不知道装在哪里了就用扫全部盘(慢),扫到后点「用这个」直接填进去;也能手填,例如 C:/Users/你/NapCat/OneKey/NapCat.Shell

要快登的 QQ 号 · 填了它,插件优先挑「填的这个号」的启动脚本;连脚本都没有时,自动生成一个直接调 NapCatWinBootMain.exe <号> 的脚本

OneBot HTTP 端口 · 跟 NapCat 网络配置里的 httpServers 一致(默认 3000)

点 保存设置 → 存到 ~/.dsh/dsh-napcat-keeper/config.json,立刻热生效。

回「状态」看:在线会显示昵称和 QQ 号;离线就点「拉起 NapCat」。


分盘扫描:装在哪都能找到

从 2.2.2 起插件不再自己猜 NapCat 装在哪,设置页第一组是 分盘扫描,目录由你来选:

  • 本机有几块盘就列几个按钮(盘符取自系统 DriveInfo,光驱、移动盘、上锁的卷都会列),点哪个扫哪个;

有「全部盘(慢)」;扫的时候可以点「停止」;插了新盘点「重新读盘」,不用重启 DSH。

  • 扫描会跳过 Windows、回收站、System Volume Information、node_modules、Temp 这类目录,

深度上限 7 层,单盘最多看 25 万个目录、最多 90 秒(全部盘时每盘 45 秒)。

  • 命中判据:目录名带 napcat,或目录里有 NapCatWinBootMain.exe,且带有 .bat 启动脚本。

命中后不再往它下面钻(QQ 目录里几千个文件,钻进去只会变慢)。

  • 命中之后再分真假:目录里只要有 versions/、QQ.exe、napcat.mjs 里的任意一样,就是真 Shell

(标绿 ✓ 像真 Shell:versions/ · QQ.exe,按钮「用这个」);三样都没有的标黄

⚠ 没看到 versions/QQ.exe/napcat.mjs 时,按钮是「仍要用这个」。

这个判据只是经验,精简版布局有可能三样都不带(我自己重装了一遍 NapCat 就没这仨,不管了 bro),

所以「标黄」不等于「不能用」,点「仍要用这个」照样能填进去。

真 Shell 一律排在前面,不受磁盘遍历顺序影响。

  • 为什么会有好几个候选:OneKey 安装器会先把壳模板解到 NapCat\OneKey\bootmain(只有 NapCatWinBootMain.exe
  • napcat.quick.bat,没有 QQ 本体),再把真正的版本装成 NapCat\<版本>.Shell(有 versions/ 和 QQ.exe)。

一次安装可能留下多个目录,只有带 QQ 本体的那个能拉起来。

  • 每命中一条就列一行:路径、挑出来的启动脚本、是否含 NapCatWinBootMain.exe、真假判定,右边按钮一键填入。
  • 到时间/到数量上限会明确写「结果可能不全」,不会闷头扫一小时。

页面上的按钮

按钮 · 作用

扫 C: / 扫 D: … · 分盘深扫(深度 7 层,跳过系统目录,单盘 90 秒),边扫边报进度,命中就列出来

重新读盘 · 立刻重新问系统要盘符(插了移动盘 / 映射了网络盘之后点,不用重启 DSH)

全部盘(慢) · 把本机每块盘都扫一遍(每盘 45 秒预算),装在冷门位置时用这个

用这个 · 在扫描结果里点:直接把这个目录存成 shellDir,并重新挑启动脚本

重新探活 · 立刻跑一轮 tick(探端口 + 探进程);跟「找 NapCat 目录」无关

拉起 NapCat · 手动下达拉起指令

杀掉重拉 · 干净地杀掉整条链再拉一条(杀不干净就不拉,避免互踢)

去重复链 · 只杀掉晚出现的那几条链,保留最早那条

建计划任务 · 现在就把计划任务建好(用户级,不需要管理员)

收起黑框 · 把已经在跑的控制台窗口藏起来(不用重启 QQ)

全部杀掉 · 只杀,不拉

端口放行

(2.9.1 删掉了这套机制)插件自己全程普通权限,不做任何提权。

桌面上那个黑框

cscript / cmd 直接拉 NapCat,会多出一个控制台窗口挂在桌面上。默认行为是不显示:

计划任务的动作写的是 wscript.exe "<DSH 家目录>\dsh-napcat-keeper\launch.vbs"(绝对路径),这个壳里用

sh.Run cmd, 0, False 把真正的 cmd 以隐藏窗口启动(0 = SW_HIDE)。壳文件用 UTF-16LE 存,中文路径也认。

不想要隐藏就把「拉起时不显示黑框」关掉,任务会退回直接跑 cmd.exe;已经跑起来的那条链想收窗口,

点「收起黑框」(action=hideConsole)即可。

记住密码:默认关,开了要自己认风险

NapCat 的快速登录令牌会失效(实测几小时左右),失效后启动脚本只会停在扫码,QQ 就一直离线,

dsh-qq-link 那边则是刷屏的 ECONNREFUSED 127.0.0.1:3000。想让它自己能爬起来,就得给它密码。

设置页「自动登录(可不填)」里勾 记住密码 时会先弹一段风险提示,要你自己点「我知道风险,仍然开启」才会生效。开启前请确认你接受这几条:

1. 密码以明文存进 ~/.dsh/dsh-napcat-keeper/config.json 和同目录下插件生成的 env.bat,不加密。

2. 任何能读你用户目录的程序都能捡走:同步盘、备份工具、其它软件、远控、临时借电脑的人。

3. QQ 密码往往和 QQ 邮箱、部分游戏、微信登录入口共用一套身份,泄漏面不止一个号。

4. 插件不打印密码,/state 也只回「存没存 + 长度」,但那只是少了一个直接查看的口子,不等于安全。

5. 随时可以点「清除密码」,配置和 bat 里的密码会被删掉。

密码不写成命令行参数(NapCatWinBootMain.exe <号> <密码> 那样会进进程列表和 Windows 事件日志),

而是走环境变量 NAPCAT_QUICK_PASSWORD / NAPCAT_QUICK_PASSWORD_MD5,且只有本机 127.0.0.1:3000 回连时才注入。

拉起方式:默认跟着 DSH 生灭

这个插件的用途就一句话:DSH 起来以后,把 QQ 接上。所以默认用 cscript 直接拉,

QQ 那条进程链挂在本 DSH 实例下面——DSH 开着它就在,DSH 关掉它就跟着走,下次开 DSH 再拉一条新的。

「刚重启 DSH,QQ 就掉了」不是毛病,是这个默认行为:新实例会自己重新拉起,扫不上就自动密码登录。

要是想要「DSH 关了 QQ 还活着」,才去填「计划任务名」那一栏(比如 NapCat-Keeper-Launch;留空 = 走 cscript,跟着 DSH 生灭)+ 勾「自动创建计划任务」,

那时插件改用 schtasks /run 拉,父进程是任务计划服务,DSH 重启牵连不到它。

用哪份 Node:默认借 DSH 自带的

插件要跑一段 JS 时才需要 Node,取的顺序是(找到第一个能用的就停):

1. 设置页里手填的 nodePath;

2. DSH 自带:<DSH NEXT>\resources\runtime\<arch>\primary-runtime\dependencies\node\bin\node.exe(DSH_NODE_PATH / DSH_NODE 环境变量也认);

3. 系统 PATH 里的 node;

4. 常见安装目录(Program Files\nodejs、%LOCALAPPDATA%\Programs\nodejs);

5. NapCat 目录里附带的 node.exe 兜底。

所以正常情况下不用装 Node、也不用管版本,跟着 DSH 走就行。状态条里会直接写着用的是哪一份、什么版本;设置页有「测一下 node」按钮可以当场验一次。

两种 NapCa

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:20,最后更新 2026-11-03

链接

GitHub · Homepage · npm

同类插件