把 QQ 私聊群聊接入智能体,收发消息与文件
26.6/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/7 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add zjlljx123/dsh-qqbot该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · platform
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 79 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0🔴 扫描:高危尚无人工评估
静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。
命令参数由运行时变量拼接读写/删除本地文件发起外部网络请求
查看扫描证据(共 42 处,展示前 39 条)
- 发起网络请求lib/client.js:63
fetch("/api/qqbot/status", { cache: "no-store" }) - 发起网络请求lib/client.js:87
fetch(url, { method: "POST", headers: { "content-type": "application/json" }, body: body ? JSON.stringify(body) : undefined }) - 写入本地文件lib/bridge.js:21
appendFileSync(DBG_LOG, `${new Date().toISOString()} ${msg}\n`, "utf8"); - 删除本地文件lib/bridge.js:340
try { await unlink(p); } catch { } - 写入本地文件lib/bridge.js:454
await mkdir(inboxDir, { recursive: true }); - 执行外部命令固定命令lib/control.js:108
const child = spawn( - 写入本地文件lib/dsh-session.js:56
await mkdir(this.stateDir, { recursive: true }); - 写入本地文件lib/dsh-session.js:57
await mkdir(this.workspaceRoot, { recursive: true }); - 读取本地文件lib/dsh-session.js:137
const raw = await readFile(join(this.stateDir, "chats.json"), "utf8"); - 写入本地文件lib/dsh-session.js:145
await writeFile(join(this.stateDir, "chats.json"), JSON.stringify(this.chats, null, 2), "utf8"); - 写入本地文件lib/dsh-session.js:161
await mkdir(target, { recursive: true }); - 发起网络请求lib/qq-client.js:85
const info = await this.request("get_login_info", {}); - 发起网络请求lib/qq-client.js:150
const rsp = await this.request("send_private_msg", { - 发起网络请求lib/qq-client.js:158
const rsp = await this.request("send_group_msg", { - 发起网络请求lib/qq-client.js:170
const rsp = await this.request("upload_private_file", { - 发起网络请求lib/qq-client.js:180
const rsp = await this.request("upload_group_file", { - 发起网络请求lib/qq-client.js:190
const rsp = await this.request("send_private_msg", { - 写入本地文件lib/util.js:20
appendFileSync(DBG_LOG, `${new Date().toISOString()} ${msg}\n`, "utf8"); - 读取本地文件lib/util.js:64
if (!existsSync(p)) return null; - 写入本地文件lib/util.js:74
await mkdir(dir, { recursive: true }); - 读取本地文件lib/util.js:83
let srcOk = existsSync(src); - 读取本地文件lib/util.js:86
srcOk = existsSync(src); - 写入本地文件lib/util.js:91
await copyFile(src, target); - 写入本地文件lib/util.js:96
try { await rename(src, target); dbg("util.materialize: renamed"); return target; } catch (e2) { dbg(`util.materialize: rename failed ${e2.code || e2. - 发起网络请求lib/util.js:116
const res = await fetch(url, { redirect: "follow", signal: AbortSignal.timeout(60000) }); - 写入本地文件lib/util.js:118
const file = createWriteStream(target); - 读取本地文件lib/util.js:166
try { await stat(p); return true; } catch { return false; } - 执行外部命令来自配置/变量lib/asr.js:30
const proc = spawn(python, ["-3", SERVER_PY, "--model", model || "small"], { - 写入本地文件lib/asr.js:55
try { appendFileSync(DBG_LOG, `[asr-server] ${String(chunk).trim()}\n`, "utf8"); } catch { } - 读取本地文件lib/asr.js:100
if (!audioPath || !existsSync(audioPath)) return ""; - 执行外部命令运行时拼接lib/napcat-manager.js:37
const out = execSync( - 读取本地文件lib/napcat-manager.js:64
return await readFile(this.bootLog, "utf8"); - 读取本地文件lib/napcat-manager.js:106
if (this.qrcodeFile && existsSync(this.qrcodeFile)) { - 读取本地文件lib/napcat-manager.js:107
const st = statSync(this.qrcodeFile); - 读取本地文件lib/napcat-manager.js:141
if (!existsSync(this.qqExe)) return { ok: false, error: `QQ.exe 不存在: ${this.qqExe}` }; - 读取本地文件lib/napcat-manager.js:146
if (!existsSync(bootMain)) return { ok: false, error: `NapCatWinBootMain.exe 不存在: ${bootMain}` }; - 读取本地文件lib/napcat-manager.js:147
if (!existsSync(hookDll)) return { ok: false, error: `NapCatWinBootHook.dll 不存在: ${hookDll}` }; - 执行外部命令来自配置/变量lib/napcat-manager.js:162
const child = spawn(bootMain, args, { - 执行外部命令运行时拼接lib/napcat-manager.js:177
execSync(`powershell -NoProfile -Command "Get-Process -Name '${name}' -ErrorAction SilentlyContinue | Stop-Process -Force"`, { windowsHide: true });
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 接入QQ私聊群聊
- 收发消息与文件
- Web控制台
README
由 DeepSeek 最新模型翻译生成dsh-qqbot 🤖💬
[!IMPORTANT]
⚠️ 免责声明(必读):本插件通过 第三方非官方协议(NapCat / OneBot v11) 接入 QQ,存在 账号风控/封号风险,请务必使用小号,切勿使用主号;仅供个人学习交流,禁止用于任何违法违规用途,后果自负。完整声明见 DISCLAIMER.md。
把 QQ(OneBot v11 / NapCat、Lagrange 等)接入 DeepSeek Harness (DSH) 的聊天机器人插件,像 OpenClaw / Harness 那样直接和你的智能体聊天:
- ✅ 双向文本对话:私聊 / 群聊,每个会话对应一个独立的 DSH 会话(带独立工作目录,上下文连续)
- ✅ 发文件:让智能体在回复中写 /send <绝对路径>,插件自动通过 QQ 原生接口把文件发给对方
- upload_private_file / upload_group_file(失败自动降级为 file 消息段)
- ✅ 收文件:对方发的图片 / 文件自动下载到该会话工作区的 inbox/,智能体可以直接读取
- ✅ 语音识别(实验性):收到的 QQ 语音自动转成文字再交给智能体,智能体能"听懂"语音;识别完成后自动删除本地语音文件,不落盘
展开完整文档(README 剩余 1 节)
dsh-qqbot 🤖💬 [!IMPORTANT] ⚠️ 免责声明(必读):本插件通过 第三方非官方协议(NapCat / OneBot v11) 接入 QQ,存在 账号风控/封号风险,请务必使用小号,切勿使用主号;仅供个人学习交流,禁止用于任何违法违规用途,后果自负。完整声明见 DISCLAIMER.md。 把 QQ(OneBot v11 / NapCat、Lagrange 等)接入 DeepSeek Harness (DSH) 的聊天机器人插件,像 OpenClaw / Harness 那样直接和你的智能体聊天: - ✅ 双向文本对话:私聊 / 群聊,每个会话对应一个独立的 DSH 会话(带独立工作目录,上下文连续) - ✅ 发文件:让智能体在回复中写 /send <绝对路径>,插件自动通过 QQ 原生接口把文件发给对方 - upload_private_file / upload_group_file(失败自动降级为 file 消息段) - ✅ 收文件:对方发的图片 / 文件自动下载到该会话工作区的 inbox/,智能体可以直接读取 - ✅ 语音识别(实验性):收到的 QQ 语音自动转成文字再交给智能体,智能体能"听懂"语音;识别完成后自动删除本地语音文件,不落盘 - ✅ 安全启动:所有桥接连接都是可选的、后台自动重连,即使 NapCat 没启动,dsh web 也照常启动(再也不会“整个工程起不来”) - ✅ 会话/工作区映射持久化,重启 DSH 后对话自动恢复 - 🎛️ Web 控制台:浏览器里直接启动/停止 NapCat、扫码登录、查看状态、重启 DSH(右下角 🤖 按钮,或 设置 → QQ 机器人控制台) 参考实现:QQ 侧参考 constansino/openclaw_qq(OneBot v11 + NapCat,含文件收发)的成熟做法。 🚀 3 分钟快速开始(新手向) 前提:Windows 电脑上已安装并运行 DeepSeek Harness(dsh web)。 第 1 步:安装插件 在 DSH 对话里对它说: 帮我安装这个插件:https://github.com/zjlljx123/dsh-qqbot (等价于执行 dsh plugin --profile web add git+https://github.com/zjlljx123/dsh-qqbot.git)然后重启 DSH Web。页面右下角出现 🤖 按钮 = 安装成功。 第 2 步:准备 QQ 机器人(NapCat + 小号) 1. 下载 NapCat(推荐 NapCat.Shell.Windows.OneKey.zip 一键版,无需安装 QQ 客户端) 2. 启动 NapCat,用机器人 QQ 小号扫码登录(⚠️ 切勿用主号) 3. 在 NapCat 里开启 WebSocket 服务器:127.0.0.1:3001,消息格式 array(默认即为该配置) 第 3 步:开聊 用手机 QQ(大号)把机器人小号加为好友,发一条消息,智能体就会回复。试试让它发文件:创建一个 hello.txt 文件并把它发给我 可选:启用控制台「启动/停止 NapCat」 聊天功能不需要任何配置即可用;若想在 🤖 面板里直接启停 NapCat / 扫码,按四、配置填入你自己的 NapCat 路径与 QQ 号即可。 ⚠️ 完整风险说明请阅读 DISCLAIMER.md:第三方非官方协议、存在封号风险、仅限小号、仅供学习交流。 目录 - 3 分钟快速开始 - 工作原理 - 一、安装 - 二、准备 QQ 端(NapCat) - 三、(可选) 微信端支持 - 四、配置 - 五、使用 - 六、常见问题 - 免责声明 工作原理 QQ 用户 ──OneBot v11 WS──▶ NapCat ──▶ dsh-qqbot (QQClient) 微信用户 ──wcf RPC TCP────▶ WeChatFerry ─▶ dsh-qqbot (WcfClient,默认关闭) │ ctx.apiProxy(与 Web UI 同一套 RPC) │ DSH 会话(每个聊天一个 session + 独立工作目录) │ DeepSeek agent 处理 → 回复 → 原路发回 - 每个聊天(QQ 私聊 / QQ 群 / 微信私聊 / 微信群)绑定一个 DSH 会话,会话工作目录默认为 $DSH_HOME/im-bridge/workspaces/<聊天key>。 - 群聊默认需要 @ 机器人(QQ)或 触发关键词(微信)才回复,避免刷屏;均可配置。 - 会话可以在 DSH Web 界面左侧看到,也可以直接在网页里继续和该会话对话。 一、安装 方式 A:让 DSH 自己装(推荐) 把插件仓库地址(GitHub 等)交给 DSH,对它说: 帮我安装这个插件:https://github.com/zjlljx123/dsh-qqbot DSH 会执行 dsh plugin --profile web add <仓库地址> 并自动注册(已实测:安装后聊天功能开箱即用,只要你自己跑着 NapCat;控制台启停 NapCat 需在配置里填自己的路径,见四、配置)。 也可以把本目录(或 zip)交给 DSH: 帮我安装 dsh-qqbot 插件 方式 B:手动安装(Windows,已验证) 推荐把插件放到 profile 目录里(可避免 Windows 上 pnpm 绝对路径 link: 生成损坏符号链接的问题): $profile = "$env:USERPROFILE\.dsh\profiles\web" 1. 把插件源码复制进 profile 目录 Copy-Item D:\path\to\dsh-qqbot $profile\dsh-qqbot -Recurse Remove-Item $profile\dsh-qqbot\node_modules -Recurse -Force -ErrorAction SilentlyContinue 2. 在 profile 的 package.json 里加依赖 + bundle(已有内容不要删,只加这两处) dependencies: "dsh-qqbot": "link:./dsh-qqbot" dsh.profile.bundles: [..., "@deepseek-ai/dsh-web-app", "dsh-qqbot"] 3. 在 profile 目录安装依赖 Set-Location $profile pnpm install 4. 重启 DSH Web(Ctrl+C 后重新运行 dsh web) 方式 C:dsh plugin 命令 cd D:\path\to\repo dsh plugin --profile web add link:./dsh-qqbot ⚠️ 注意:Windows 上 pnpm add link:<绝对路径> 可能生成损坏的符号链接(Windows 上实测)。如果装完 node_modules\dsh-qqbot 指向不存在,请改用方式 B(相对 link:./dsh-qqbot 放在 profile 目录内)。 装完后刷新/重启,日志里会出现 [dsh-qqbot] 开头的输出。 二、准备 QQ 端(NapCat) 1. 下载安装 NapCat(Windows 一键安装),用你的 QQ 号登录。 2. 打开 NapCat 配置(WebUI / config.json),开启 WebSocket 服务器,监听 127.0.0.1:3001: - ws 端口:3001 - message_post_format:array(推荐,插件兼容 array 与 CQ 字符串两种格式) - 如设置 accessToken,插件 qq.accessToken 填同一个值 3. 插件默认连接 ws://127.0.0.1:3001,无需额外改动即可工作。 发送文件时,NapCat 需要能访问你机器上的本地文件路径(本机运行即满足)。若 NapCat 跑在 Docker/远程容器里,需要共享目录并把文件放到容器可见路径(见 上传失败 排查)。 三、(可选) 微信端支持(实验性,默认关闭) ⚠️ 个人微信接入风险更高(Hook 注入),默认 wechat.enabled: false。以下内容仅当确有需要时参考;强烈建议只使用 QQ 通道。 WeChatFerry 是 Windows 下通过 DLL 注入 PC 微信实现收发消息的免费方案(个人微信)。 1. 安装 微信 3.9.12.17(Windows x64) 并登录机器人微信号(下载:wechat-windows-versions,关闭自动更新)。 2. 下载 WeChatFerry 最新 Release,解压得到 wcf.exe、sdk.dll 等文件。 3. 以管理员身份运行(把微信注入并启动 RPC 服务): .\wcf.exe start 10086 - 命令口:127.0.0.1:10086;消息口:127.0.0.1:10087(插件自动连接)。 - 可多开端口:wcf.exe start <port>。 4. 插件默认连接 127.0.0.1:10086,启动后日志出现 WeChat 已连接 (wxid=...) 即成功。 微信收文件依赖 download_attach + 微信文件目录(WeChat Files);如果收文件失败,可在配置里手动指定 wechat.wechatFilesDir。 四、配置 插件默认配置见插件内 cordis.patch.yml。要修改,把整个 config: 块复制到你 profile 的 cordis.patch.yml(C:\Users\<你>\.dsh\profiles\web\cordis.patch.yml)里再改(profile 层覆盖 bundle 层): - id: dsh-qqbot config: enabled: true logLevel: 'info' # info | warn | error | silent stateDir / workspaceRoot 留空 = 默认 $DSH_HOME/im-bridge/... systemHint: '...' # 注入给 agent 的提示词(含 /send 用法) qq: enabled: true wsUrl: 'ws://127.0.0.1:3001' accessToken: '' # 与 NapCat 一致 selfId: 0 # 0 = 自动获取 requireMention: true # 群聊仅被 @ 时回复 adminOnly: false # true = 只回 admins 私聊 admins: [] # 管理员 QQ 号(字符串数组) allowedChats: [] # 非空 = 只服务这些 QQ 号/群号 blockedChats: [] # 黑名单 maxMessageChars: 4000 # 超长回复自动分段 wechat: enabled: true host: '127.0.0.1' port: 10086 requireMention: false # 群聊仅被 @ / 命中关键词时回复 triggerKeyword: '' # 群聊触发词;空且 requireMention=false 则全回 adminOnly: false admins: [] allowedChats: [] blockedChats: [] maxMessageChars: 2000 wechatFilesDir: '' # 微信文件目录,空 = 自动探测 asr: 语音识别(实验性):把收到的 QQ 语音转成文字再交给 agent。 enabled: true python: 'py' # Python 启动器(需含 faster-whisper + pilk) model: 'small' # whisper 模型: tiny/base/small/medium lang: 'zh' # 识别语言 timeoutMs: 180000 # 单条语音识别超时 群聊回复策略(重要): | 平台 | requireMention | 效果 | | QQ | true(默认) | 群里被 @ 才回复 | | QQ | false | 群里所有消息都回复(慎用,可用 allowedChats 限定群) | | 微信 | false(默认)+ 空 triggerKeyword | 所有群消息都回复(慎用!) | | 微信 | true | 被 @(内容含 @机器人名)或命中 triggerKeyword 才回复 | 五、使用 Web 控制台(启停 QQ 机器人 / 扫码 / 状态) 装好后,DSH 网页右下角有一个 🤖 悬浮按钮;点开就是「IM 桥接控制台」,功能: | 功能 | 说明 | | ▶ 启动 NapCat | 一键拉起 QQ 机器人(免命令行、免管理员) | | ■ 停止 NapCat | 停止 QQ / NapCat 进程 | | 登录二维码 | 未登录时自动显示,用机器人小号扫码即可 | | 状态面板 | NapCat 进程 / 3001 端口 / 登录态 / DSH 插件连接 / 会话数 | | NapCat 管理面板 | 打开 NapCat WebUI | | ↻ 重启 DSH | 重启 DSH Web(页面短暂断开后自动恢复) | 也可以在 设置 → IM 桥接控制台 打开同一面板。控制台的 NapCat 路径在配置的 napcat 段(runDir / qqExe / account 等)。 聊天 - 私聊机器人即可对话;群聊按上述策略触发。 - 支持 @(QQ 群)、关键词(微信群)。 聊天内命令 | 命令 | 说明 | | /help | 帮助 | | /status | 查看桥接状态 / 会话 ID / 工作目录 | | /reset | 重置本聊天会话(开全新上下文),仅管理员 | 让 agent 发文件 在提示词里告诉 agent(插件已自动注入),或直接说“把 XX 文件发给我”。agent 会在回复中单独一行写: /send C:\Users\...\report.pdf 插件会: 1. 解析出该行 → 校验文件存在(相对路径按会话工作目录解析,支持 ~) 2. QQ:upload_private_file / upload_group_file(失败降级 file 消息段) 3. 微信:WCF_SendFile 4. 把文件从回复文本中剔除,只把剩余文字发出去 接收文件 - QQ:对方发的文件 / 图片自动下载到 <会话工作目录>/inbox/,agent 通过文件工具可读。 - 微信:图片(type 3)自动解密保存;文件(type 49)download_attach 后定位复制到 inbox;链接卡片只转发链接。 会话与工作目录 每个聊天的工作目录:$DSH_HOME/im-bridge/workspaces/<聊天key>/,例如 qq_private_123456、qq_group_789、wx_private_wxid_xxx、wx_room_xxx@chatroom。 映射关系存在 $DSH_HOME/im-bridge/state/chats.json,重启不丢。 六、常见问题 Q:装上后 dsh web 起不来了? 插件本身不会阻止启动:所有连接都是可选 + 后台重试。若启动失败,请检查 profile 的 package.json 是否 JSON 合法(不要用带 BOM 的编辑器保存)、bundles 是否写对、pnpm install 是否成功。 Q:日志里 QQ (ws://...) 连接失败 / wcf 不可达? 说明对应端没起来——NapCat 没开 / wcf 没注入。插件每 5 秒重试,不影响 DSH。 Q:QQ 上传文件失败? - NapCat 需能读到该本地路径(本机运行没问题;容器部署需共享目录)。 - 检查文件是否真的存在、路径是否绝对路径。 - 部分 QQ 场景有文件类型/大小限制,可让 agent 先压缩。 Q:微信收文件失败? wcf 的 download_attach 需要微信端已登录且消息较新;老消息可能下载不到。可在 wechat.wechatFilesDir 指定 WeChat Files 目录帮助定位。 Q:群聊不回? 检查策略:QQ 默认 requireMention: true(没 @ 不回);微信默认全回,若设置了 requireMention 需命中关键词或 @。 Q:回复乱码 / 表情? QQ 的 face、record 等段只保留 [表情] 等占位标记;如需表情渲染可自行扩展。 Q:语音识别不工作 / 一直识别失败? 语音识别为实验性功能,需要本机满足: 1. 安装 Python 依赖:pip install faster-whisper pilk(需 Python 3.8+) 2. 安装 ffmpeg 并加入 PATH(QQ 的 .amr 语音为 silk 编码,pilk 负责解码) 3. 首次识别会自动下载 whisper 模型(small 约 460MB),国内网络慢可设环境变量 HF_ENDPOINT=https://hf-mirror.com 4. 语音识别完成后会自动删除本地语音文件;模型常驻后台,重启机器人后自动预热 Q:语音识别多久生效? 机器人启动时自动预热模型,之后每条语音约 1-3 秒出结果;首次启动需等模型加载(约 10-30 秒)。 免责声明 完整声明见 DISCLAIMER.md。核心要点: - 个人微信接入(WeChatFerry / 微信 Hook)仅供学习交流,请遵守微信用户协议与当地法律,禁止用于骚扰、营销、诈骗等用途;使用微信 Hook 有一定账号风险,后果自负。 - QQ 机器人请使用合规账号,遵守 QQ 平台规则。 - 本项目与 DeepSeek、腾讯、微信官方无关。 License MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
zjlljx123/dsh-qqbot
把 QQ 私聊群聊接入智能体,收发消息与文件
相关插件 · 平台集成
智能体工程课walkinglabs/learn-harness-engineering
一门项目制课程,教你搭建环境、管理状态、做验证、加控制机制,让 AI 编程智能体稳定干活。
★ 21,155已汉化DSH
71.7
视频翻译配音liuzhao1225/YouDub-webui
开源视频本地化工作台:导入视频,识别、翻译并逐句克隆原声,生成字幕和配音成片。
★ 5,792已汉化Cordis
71.4
失败经验库Ikalus1988/MisakaNet
📚 零依赖、由 git 支撑的微课程库,让 AI 智能体异步分享并检索经过验证的调试经验。| https://misakanet.org
★ 550已汉化DSH
71.2
桌面智能体工作区freestylefly/wesight
WeSight 是开源桌面控制台,面向本地 AI 智能体。它帮你安装或复用 Claude…
★ 933已汉化MCP
71
IM 机器人接入xmanrui/dsh-im
让 DeepSeek Harness 触手可及 Connecting DeepSeek Harness
★ 3,110已汉化DeepSeek 客户端
70.9
中国平台研究引擎Jesseovo/last30days-skill-cn
给 AI Agent 的中文互联网研究 Skill:检索 8 大平台最近 30…
★ 2,031已汉化DSH
70.7
这是你的仓库?认领条目