🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

QQ 私聊陪伴 phfb/dsh-qq-bot

DeepSeek Harness
phfb10 天前有提交已提供中文文档扫描:含敏感能力

把 QQ 私聊接进 DSH,让她陪你聊天并主动开口

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/26 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add phfb/dsh-qq-bot
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么[目录]—
dsh 原生插件 · platform
暂无时间戳·判据 →
装得上吗[实装验证]—
本站尚未做安装检查
暂无时间戳·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/05·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 10 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 109 处,展示前 64 条)
  • 读取本地文件
    dsh-alive/lib/index.js:129
    if (!existsSync(LOG_FILE)) return
  • 读取本地文件
    dsh-alive/lib/index.js:130
    if (statSync(LOG_FILE).size < LOG_MAX_BYTES) return
  • 写入本地文件
    dsh-alive/lib/index.js:131
    renameSync(LOG_FILE, `${LOG_FILE}.1`)
  • 写入本地文件
    dsh-alive/lib/index.js:140
    mkdirSync(LOG_DIR, { recursive: true })
  • 写入本地文件
    dsh-alive/lib/index.js:142
    appendFileSync(LOG_FILE, `${line}\n`)
  • 读取本地文件
    dsh-alive/lib/index.js:315
    if (existsSync(cfgPath)) savedCfg = JSON.parse(readFileSync(cfgPath, 'utf8'))
  • 读取本地文件
    dsh-alive/lib/index.js:315
    if (existsSync(cfgPath)) savedCfg = JSON.parse(readFileSync(cfgPath, 'utf8'))
  • 写入本地文件
    dsh-alive/lib/index.js:330
    mkdirSync(config.dataDir, { recursive: true })
  • 写入本地文件
    dsh-alive/lib/index.js:331
    writeFileSync(cfgPath, `${JSON.stringify(pickConfigForFile(config), null, 2)}\n`, 'utf8')
  • 写入本地文件
    dsh-alive/lib/index.js:338
    try { mkdirSync(LOG_DIR, { recursive: true }) } catch { }
  • 读取本地文件
    dsh-alive/lib/index.js:356
    const next = JSON.parse(readFileSync(cfgPath, 'utf8'))
  • 读取本地文件
    dsh-alive/lib/index.js:401
    if (existsSync(firstRunPath)) {
  • 读取本地文件
    dsh-qq-bot/lib/attachment.js:54
    if (!existsSync(file)) {
  • 写入本地文件
    dsh-qq-bot/lib/attachment.js:55
    mkdirSync(dir, { recursive: true })
  • 写入本地文件
    dsh-qq-bot/lib/attachment.js:56
    writeFileSync(file, buf)
  • 发起网络请求
    dsh-qq-bot/lib/client.js:39
    return fetch(API + path, init).then(function (res) {
  • 写入本地文件
    dsh-qq-bot/lib/image-store.js:88
    mkdirSync(root, { recursive: true })
  • 读取本地文件
    dsh-qq-bot/lib/image-store.js:102
    const raw = JSON.parse(readFileSync(jsonPath(), 'utf8'))
  • 写入本地文件
    dsh-qq-bot/lib/image-store.js:113
    writeFileSync(jsonPath(), JSON.stringify({ version: 1, entries }, null, 2), 'utf8')
  • 写入本地文件
    dsh-qq-bot/lib/image-store.js:118
    writeFileSync(join(root, INDEX_MD), renderIndex(entries, { dir: root, limitBytes }), 'utf8')
  • 发起网络请求
    dsh-qq-bot/lib/image-store.js:146
    const res = await fetch(url, {
  • 读取本地文件
    dsh-qq-bot/lib/image-store.js:194
    while (existsSync(join(root, file)) && guard < 50) {
  • 写入本地文件
    dsh-qq-bot/lib/image-store.js:201
    writeFileSync(path, buf)
  • 写入本地文件
    dsh-qq-bot/lib/image-store.js:269
    mkdirSync(filesDir, { recursive: true })
  • 写入本地文件
    dsh-qq-bot/lib/image-store.js:270
    writeFileSync(join(filesDir, file), got.buf)
  • 读取本地文件
    dsh-qq-bot/lib/image-store.js:359
    return readdirSync(root)
  • 读取本地文件
    dsh-qq-bot/lib/image-store.js:364
    const st = statSync(p)
  • 删除本地文件
    dsh-qq-bot/lib/image-store.js:423
    unlinkSync(path)
  • 写入本地文件
    dsh-qq-bot/lib/index.js:117
    mkdirSync(dir, { recursive: true })
  • 读取本地文件
    dsh-qq-bot/lib/index.js:138
    logBytes = statSync(file).size
  • 写入本地文件
    dsh-qq-bot/lib/index.js:150
    renameSync(LOG_FILE, `${LOG_FILE}.1`)
  • 写入本地文件
    dsh-qq-bot/lib/index.js:161
    appendFileSync(LOG_FILE, `${line}\n`)
  • 读取本地文件
    dsh-qq-bot/lib/index.js:227
    return JSON.parse(readFileSync(file, 'utf8'))
  • 写入本地文件
    dsh-qq-bot/lib/index.js:235
    writeFileSync(file, `${JSON.stringify(value, null, 2)}\n`, 'utf8')
  • 读取本地文件
    dsh-qq-bot/lib/index.js:706
    const raw = JSON.parse(readFileSync(controlPath, 'utf8'))
  • 写入本地文件
    dsh-qq-bot/lib/index.js:719
    writeFileSync(controlPath, `${JSON.stringify(runtime, null, 2)}\n`, 'utf8')
  • 读取本地文件
    dsh-qq-bot/lib/index.js:730
    const raw = JSON.parse(readFileSync(mapPath, 'utf8'))
  • 写入本地文件
    dsh-qq-bot/lib/index.js:761
    writeFileSync(mapPath, `${JSON.stringify(out, null, 2)}\n`, 'utf8')
  • 读取本地文件
    dsh-qq-bot/lib/index.js:1408
    const packs = readdirSync(root, { withFileTypes: true }).filter((d) => d.isDirectory())
  • 读取本地文件
    dsh-qq-bot/lib/index.js:1415
    cats = readdirSync(base, { withFileTypes: true }).filter((d) => d.isDirectory())
  • 发起网络请求
    dsh-qq-bot/lib/index.js:1450
    const r = await fetch(`${endpoint}/images/generations`, {
  • 发起网络请求
    dsh-qq-bot/lib/index.js:1473
    const dl = await fetch(item.url)
  • 执行外部命令固定命令
    dsh-qq-bot/lib/index.js:4205
    const child = spawn('notepad.exe', [target], { detached: true, stdio: 'ignore', windowsHide: false })
  • 执行外部命令来自配置/变量
    dsh-qq-bot/lib/index.js:4287
    const child = spawn(shutExe, ['/a'], { windowsHide: true, stdio: 'ignore' })
  • 执行外部命令来自配置/变量
    dsh-qq-bot/lib/index.js:4300
    const child = spawn(shutExe, ['/r', '/t', String(delay), '/f', '/c', 'DSH 面板手动重启'], {
  • 执行外部命令固定命令
    dsh-qq-bot/lib/index.js:4413
    spawn('taskkill', ['/PID', String(pid), '/T', '/F'], { windowsHide: true, stdio: 'ignore' })
  • 执行外部命令来自配置/变量
    dsh-qq-bot/lib/index.js:4435
    const child = spawn(exe, [script], {
  • 执行外部命令固定命令
    dsh-qq-bot/lib/index.js:4495
    const child = spawn(
  • 发起网络请求
    dsh-qq-bot/lib/self-update.mjs:277
    const res = await fetch(url, {
  • 读取本地文件
    dsh-qq-bot/lib/self-update.mjs:327
    if (!existsSync(pathA)) return false
  • 读取本地文件
    dsh-qq-bot/lib/self-update.mjs:328
    return readFileSync(pathA).equals(bytesB)
  • 读取本地文件
    dsh-qq-bot/lib/self-update.mjs:356
    return JSON.parse(readFileSync(p, 'utf8'))
  • 写入本地文件
    dsh-qq-bot/lib/self-update.mjs:362
    mkdirSync(dirname(p), { recursive: true })
  • 写入本地文件
    dsh-qq-bot/lib/self-update.mjs:363
    writeFileSync(p, `${JSON.stringify(v, null, 2)}\n`, 'utf8')
  • 删除本地文件递归
    dsh-qq-bot/lib/self-update.mjs:413
    rmSync(pendingDir, { recursive: true, force: true })
  • 写入本地文件
    dsh-qq-bot/lib/self-update.mjs:414
    mkdirSync(staged, { recursive: true })
  • 写入本地文件
    dsh-qq-bot/lib/self-update.mjs:430
    mkdirSync(dirname(dest), { recursive: true })
  • 写入本地文件
    dsh-qq-bot/lib/self-update.mjs:431
    writeFileSync(dest, f.data)
  • 读取本地文件
    dsh-qq-bot/lib/self-update.mjs:441
    if (!existsSync(root)) continue
  • 读取本地文件
    dsh-qq-bot/lib/self-update.mjs:446
    JSON.parse(readFileSync(file, 'utf8'))
  • 删除本地文件递归
    dsh-qq-bot/lib/self-update.mjs:466
    rmSync(pendingDir, { recursive: true, force: true })
  • 读取本地文件
    dsh-qq-bot/lib/self-update.mjs:505
    if (!existsSync(root)) continue
  • 写入本地文件
    dsh-qq-bot/lib/self-update.mjs:516
    mkdirSync(dirname(dest), { recursive: true })
  • 删除本地文件递归
    dsh-qq-bot/lib/self-update.mjs:553
    rmSync(pendingDir, { recursive: true, force: true })
扫描于 2026/11/5(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

把 QQ 私聊接进 DeepSeek Harness:私聊陪伴向的 DSH 插件(dsh-qq-bot + dsh-alive)

README

由 DeepSeek 最新模型翻译生成
dsh-qq-bot 把 QQ 私聊接进 DeepSeek Harness,让 DSH 常驻在你的手机 QQ 里 —— 随时能找她说话,她也会在你安静太久的时候自己开口。 这是私聊陪伴向的插件,不是群聊管理机器人。 群消息直接忽略,不碰群管、群公告、撤回禁言那一套。 本仓库两个插件,一起用才完整: | 目录 | 包名 | 干什么 | | dsh-qq-bot/ | dsh-qq-bot | 收 QQ 私聊 → 交给 DSH agent → 回复切成几条、带打字停顿发回去 | | dsh-alive/ | dsh-alive | 活人感:她心里挂着没落地的事到期了,由她自己主动开口一次 | 手机 QQ → QQ 客户端(QQNT) → SnowLuma(注入 hook, OneBot v11 WS) → dsh-qq-bot → DSH agent ↑ dsh-alive ──投一条"念头"──┘ - SnowLuma 是 QQ 协议端,不在本仓库里,要你自己部署。它注入 QQNT 客户端进程,暴露 OneBot v11(HTTP 3000 / WS 3001)。 - dsh-qq-bot 是 DSH 宿主插件,零运行时依赖(只用 node:),装进 profile 就跑。
展开完整文档(README 剩余 1 节)
dsh-qq-bot

把 QQ 私聊接进 DeepSeek Harness,让 DSH 常驻在你的手机 QQ 里 —— 随时能找她说话,她也会在你安静太久的时候自己开口。

这是私聊陪伴向的插件,不是群聊管理机器人。 群消息直接忽略,不碰群管、群公告、撤回禁言那一套。

本仓库两个插件,一起用才完整:

| 目录 | 包名 | 干什么 |
| dsh-qq-bot/ | dsh-qq-bot | 收 QQ 私聊 → 交给 DSH agent → 回复切成几条、带打字停顿发回去 |
| dsh-alive/ | dsh-alive | 活人感:她心里挂着没落地的事到期了,由她自己主动开口一次 |

手机 QQ → QQ 客户端(QQNT) → SnowLuma(注入 hook, OneBot v11 WS) → dsh-qq-bot → DSH agent ↑ dsh-alive ──投一条"念头"──┘

- SnowLuma 是 QQ 协议端,不在本仓库里,要你自己部署。它注入 QQNT 客户端进程,暴露 OneBot v11(HTTP 3000 / WS 3001)。
- dsh-qq-bot 是 DSH 宿主插件,零运行时依赖(只用 node:),装进 profile 就跑。
- dsh-alive 不自己连 QQ,它只把自己的"念头"投进 QQ 会话,由 dsh-qq-bot 负责发出去。

它是什么 / 不是什么

是:

- 只处理私聊:你在手机上给 BOT 号发一句话,消息经 OneBot 进来,交给 DSH 的 agent 处理,回复再原路发回 QQ。
- 带上下文管理:同一段对话有连续记忆,上下文快满了(默认 80%)自动开新局,并在 QQ 里说一声。
- 回复会切成几条、带"正在输入"的停顿,看起来像人在打字;markdown 的 、 不会漏到 QQ 里。
- 能发表情包(模型自己决定什么时候发,有间隔 / 配额 / 概率三道闸门)。
- 装了 dsh-alive 之后,她还会在你安静太久时主动开口 —— 不是定时器随机发消息,而是"你说了去拿外卖、18 分钟还没回来"这种具体的挂念。

不是:

- ❌ 不支持群聊管理。群消息进来直接忽略。
- ❌ 不支持自动加好友 / 同意好友请求。
- ❌ 不做多账号同时在线。一次只挂一个 BOT 号。
- ❌ 不保存 QQ 密码(SnowLuma 走客户端 hook,没有密码这一环)。
- ❌ 不下载图片、不转写语音,图片/语音只留占位符。

前置条件

| 需要什么 | 说明 |
| Node ≥ 22 | 插件用内置 WebSocket,没有依赖包 |
| DSH | 插件跑在 DSH 宿主进程里,DSH 关了 bot 就下线 |
| SnowLuma | OneBot v11 协议端,必须自己部署 |
| 登录了 BOT 号的 QQ 客户端 | BOT 号要在 QQNT 里真登录,并且在 SnowLuma 里挂载 |

装哪个

两个仓库目录是两个独立插件包,各装各的:

| 想干什么 | 看哪 |
| 让 QQ 消息能进能出 | dsh-qq-bot/README.md —— 从零配 SnowLuma、装插件、填配置、排查 1006 |
| 让她会主动开口 | dsh-alive/README.md —— 12 道闸门、节奏参数、装法与 junction 注意事项 |

两条路都一样:装进 DSH profile,重启 DSH,然后有个 图形化设置窗口(tools\settings-ui.cmd / tools\settings-alive.cmd)可以改参数,保存即热应用 —— 不用为了让一个数字生效去动 cordis.patch.yml(那文件改错会让整个宿主起不来)。

QQ 里能用的命令

| 命令 | 作用 |
| /qq off | 闭嘴。连接保持不断,消息只记日志 |
| /qq on | 回来 |
| /qq status | 转发开没开、当前第几局、上下文占用多少 |

对 dsh-alive 说话它也会听:「别吵 / 滚 / 闭嘴」硬静音 2 小时,「我在开会 / 上课 / 面试」软静音 90 分钟,「我忙完了 / 好了 / 出来吧」解除。

目录结构

.
├── dsh-qq-bot/ 插件本体 │ ├── lib/ index / config / client / onebot / policy │ ├── test/ 单测(node --test) │ ├── tools/ Windows 工具:设置窗口、自检、启动器、托盘 │ ├── cordis.patch.yml 出厂默认配置(bundle patch,Loader 自动读) │ └── README.md 完整文档 └── dsh-alive/ 活人感插件 ├── lib/ index / config / policy(判定核心是纯函数、可单测) ├── test/ ├── tools/ 设置窗口 └── README.md

跑测试

cd dsh-qq-bot && node --test "test//.test.mjs"
cd dsh-alive && node --test "test/policy.test.mjs"

(Node 24 不认 node --test <目录>,要么给文件路径,要么不带参数让它自己找。)

隐私

- 插件不联网上传任何东西。只连你自己机器上的 SnowLuma(127.0.0.1)。
- 不保存 QQ 密码。
- 所有状态只写在本地数据目录:会话映射、控制开关、表情闸门状态、alive 的配额与念头、日志。
- 聊天内容会进 DSH 的上下文(否则她记不住你),这部分由你自己的 DSH 配置决定。
- 删除数据目录 = 清空所有本地状态,插件下次启动当新人重新开始。
- tools\bot-config.json 里有你的 QQ 号和 SnowLuma token,已被 .gitignore 排除,别提交。

License

MIT
预览分享卡片长什么样 ↓phfb/dsh-qq-bot
分享 · DeepSeek Harness Hub
phfb/dsh-qq-bot

把 QQ 私聊接进 DSH,让她陪你聊天并主动开口

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部