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

QQ 机器人接入 master1Sun/dsh-QQbot

DeepSeek Harnessv0.1.10
master1Sun44 天前有提交已提供中文文档扫描:含敏感能力

把 QQ 官方机器人WebSocket 长连接模式接入本机 DeepSeek Harnessdsh。

30.3/100
综合分
1
GitHub 星标
880
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @sunjuntao/dsh-qqbot
npm 源 · @sunjuntao/dsh-qqbot 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · platform
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 44 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包@sunjuntao/dsh-qqbot @ 0.1.10
✓Node 引擎要求 >=22.19 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/7 04:10:53

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

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

读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 80 处,展示前 32 条)
  • 读取本地文件
    lib/index.js:48
    return JSON.parse(await readFile2(path5, "utf8"));
  • 写入本地文件
    lib/index.js:57
    await mkdir(pluginDataDir(), { recursive: true });
  • 写入本地文件
    lib/index.js:60
    await writeFile(tmp, text, privateFile ? { mode: 384 } : "utf8");
  • 写入本地文件
    lib/index.js:61
    if (!privateFile) await writeFile(tmp, text, "utf8");
  • 删除本地文件
    lib/index.js:62
    await rm(path5, { force: true });
  • 写入本地文件
    lib/index.js:63
    await rename(tmp, path5);
  • 删除本地文件
    lib/index.js:187
    await rm(credentialsPath(), { force: true });
  • 读取本地文件
    lib/index.js:2802
    text = await readFile(file, "utf8");
  • 写入本地文件
    lib/index.js:2883
    await mkdir2(dir, { recursive: true });
  • 写入本地文件
    lib/index.js:2884
    await appendFile(join2(dir, `archive-${shanghaiDay(now)}.jsonl`), line, "utf8");
  • 读取本地文件
    lib/index.js:2897
    return (await readdir(dir)).filter((f) => /^archive-\d{4}-\d{2}-\d{2}\.jsonl$/.test(f)).sort().reverse();
  • 读取本地文件
    lib/index.js:2909
    monthFiles = (await readdir(dir)).filter((f) => MONTH_FILE_RE.test(f));
  • 读取本地文件
    lib/index.js:2917
    raw = await readFile3(path5, "utf8");
  • 删除本地文件
    lib/index.js:2941
    await rm2(path5, { force: true });
  • 读取本地文件
    lib/index.js:2973
    raw = await readFile3(join2(dir, file), "utf8");
  • 删除本地文件
    lib/index.js:3157
    await rm2(path5, { force: true });
  • 发起网络请求
    lib/index.js:3202
    const res = await fetch(url, {
  • 删除本地文件
    lib/index.js:3272
    await rm3(tmp, { force: true }).catch(() => {
  • 读取密钥环境变量
    lib/index.js:3383
    const envSecret = process.env.QQBOT_APP_SECRET ?? "";
  • 发起网络请求
    lib/index.js:4109
    const res = await fetch(this.#options.getTokenUrl(), {
  • 发起网络请求
    lib/index.js:4131
    const res = await fetch(
  • 删除本地文件
    lib/index.js:4817
    await rm4(defaultPath(appId), { force: true });
  • 发起网络请求
    lib/index.js:5534
    const res = await fetch(url, { signal: AbortSignal.timeout(DOWNLOAD_TIMEOUT_MS) });
  • 发起网络请求
    lib/index.js:5591
    const res = await fetch(`${base}/audio/transcriptions`, {
  • 发起网络请求
    lib/index.js:5613
    const res = await fetch(`${base}/audio/speech`, {
  • 发起网络请求
    lib/cli.js:1124
    const c = JSON.stringify(r), s = new URL(t), o = _.request({ hostname: s.hostname, path: s.pathname + s.search, method: "POST", timeout: a, headers: {
  • 读取本地文件
    lib/cli.js:1252
    return JSON.parse(await readFile(path, "utf8"));
  • 写入本地文件
    lib/cli.js:1258
    await mkdir(pluginDataDir(), { recursive: true });
  • 写入本地文件
    lib/cli.js:1261
    await writeFile(tmp, text, privateFile ? { mode: 384 } : "utf8");
  • 写入本地文件
    lib/cli.js:1262
    if (!privateFile) await writeFile(tmp, text, "utf8");
  • 删除本地文件
    lib/cli.js:1263
    await rm(path, { force: true });
  • 写入本地文件
    lib/cli.js:1264
    await rename(tmp, path);
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-credentials@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-webhook@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 接入QQ官方机器人

README

由 DeepSeek 最新模型翻译生成
dsh-QQbot 把 QQ 官方机器人(WebSocket 长连接模式)接入本机 DeepSeek Harness(dsh),让 AI 直接在 QQ 群聊 / 单聊里工作。 功能详解、操作步骤与全部配置参数见 用户手册.md。 QQ 群/单聊 ──WebSocket(每机器人一条)──▶ dsh-qqbot ──webhookRuntime──▶ DSH 会话 QQ 窗口 ◀──被动回复── 回复泵(按来源机器人路由)◀── 助手回复定时消息 ──30s 调度──▶ QQ 群/单聊 核心能力 - 多机器人:bots.json 唯一事实来源,每机器人独立凭据与配置,全部启用的同时在线,回复 / 定时 / 主动消息都由来源机器人发出。 - 免公网接入:官方 SDK 长连接主动外连 QQ 网关,无需公网 IP、域名与回调配置。 - 消息响应:群 @ 直接回复(可执行工具,附带最近 10 条上下文);群未 @ 消息经价值评分过滤后才以「只聊天」方式插话;单聊直接会话。 - 会话与记忆:同一群/单聊复用会话(/new 重开);长期记忆跨会话保留(/记忆、/清空记忆)。 - 多模态与语音:入站图片 / 文件 / 语音入上下文;语音转写五档(默认平台转写)、可选单聊 TTS 语音回复、单聊「正在输入」状态。 - 定时消息:/定时 每天 09:00 …
展开完整文档(README 剩余 1 节)
dsh-QQbot

把 QQ 官方机器人(WebSocket 长连接模式)接入本机 DeepSeek Harness(dsh),让 AI 直接在 QQ 群聊 / 单聊里工作。

功能详解、操作步骤与全部配置参数见 用户手册.md。

QQ 群/单聊 ──WebSocket(每机器人一条)──▶ dsh-qqbot ──webhookRuntime──▶ DSH 会话 QQ 窗口 ◀──被动回复── 回复泵(按来源机器人路由)◀── 助手回复定时消息 ──30s 调度──▶ QQ 群/单聊

核心能力

- 多机器人:bots.json 唯一事实来源,每机器人独立凭据与配置,全部启用的同时在线,回复 / 定时 / 主动消息都由来源机器人发出。
- 免公网接入:官方 SDK 长连接主动外连 QQ 网关,无需公网 IP、域名与回调配置。
- 消息响应:群 @ 直接回复(可执行工具,附带最近 10 条上下文);群未 @ 消息经价值评分过滤后才以「只聊天」方式插话;单聊直接会话。
- 会话与记忆:同一群/单聊复用会话(/new 重开);长期记忆跨会话保留(/记忆、/清空记忆)。
- 多模态与语音:入站图片 / 文件 / 语音入上下文;语音转写五档(默认平台转写)、可选单聊 TTS 语音回复、单聊「正在输入」状态。
- 定时消息:/定时 每天 09:00 …、间隔、查看、取消(每群/单聊默认 15 条,bots.json scheduleMaxPerChat 可调,0=不限);mode=ai 到点由 AI 现场生成内容。
- 群管理:敏感词撤回、/广播、入群欢迎语、🗑️ 表情撤回、敏感操作按钮审批。
- AI 工具:qqbot_schedule_、qqbot_send_message/image/file/voice、qqbot_memory_、qqbot_request_approval——直接说话即可(「每天九点提醒我喝水」)。
- 安全与可靠:回复净化、媒体 SSRF 防护、可选本地路径白名单;发送失败进出箱每 60s 重投;主动消息每日配额可控;消息本地归档。
- 设置界面:dsh 设置 → QQ 机器人,扫码或手动添加机器人,行为配置即改即生效。

安装

dsh plugin --profile web add

开发模式:npm run build && npm run sync(同步到 ~/.dsh/profiles/web/node_modules/@sunjuntao/dsh-qqbot)。

依赖 @deepseek-ai/dsh-webhook 提供的 ctx.webhookRuntime;不可用时插件降级运行(不创建会话,设置页与 /status 可查)。

快速上手

1. QQ 开放平台建机器人,拿 appId / appSecret,配置出口 IP 白名单;群设置里把「可获取的群聊消息范围」设为全部。
2. dsh 设置 → QQ 机器人 → 添加机器人(扫码或手动填写),保存即热生效。
3. 拉机器人进群 @ 它说话,或加好友私聊。

配置速览

行为配置按机器人独立存于 ~/.dsh/qqbot/bots.json,热生效无需重启。最常用几项:

| 字段 | 默认 | 说明 |
| agentPreset | default | @ 与单聊使用的 Preset |
| groupFullReply / valueThreshold | true / 5 | 群未 @ 消息是否参与回复 / 价值阈值(越高越安静) |
| groupCooldownMs / senderCooldownMs | 60000 / 30000 | 同群 / 同人回复最小间隔 |
| atContextMessages | 10 | @ 消息附带的群聊上下文条数 |
| quotaPerDay | 50 | 主动消息每日配额(0=不限) |
| bannedWords | [] | 群敏感词(命中撤回并跳过回复) |
| groupOverrides | {} | 按群 openid 覆盖行为字段 |

界面隐藏配置项:归档 archiveEnabled、长期记忆 memoryEnabled、文件识别 fileIngestion、欢迎语、表情撤回、Markdown、回复净化、正在输入、按钮审批、多模态等默认常开;ttsReply、路径白名单、主动兜底默认关;secretEnv、agentPresetChat(留空跟随 agentPreset)、voiceTranscription(默认 note)、scheduleMaxPerChat(默认 15)、permissionAdmins 等仅 bots.json 可配。完整清单与参数关联见手册。

目录结构

src/host/ 插件运行时(admin/ messaging/ schedule/ chat/ qq/ infra/) src/client/ 设置界面(挂 dsh 设置页「QQ 机器人」) src/shared/ 前后端共用(config / time / types) src/cli.ts 终端凭据管理 CLI scripts/ build / deploy / dev 脚本

主要数据落在 ~/.dsh/qqbot/:bots.json(机器人库,唯一事实来源)、global.json(adminToken)、schedules.json、memory/、archive/、outbox.json、permissions//、stats/。

已知边界

- 定时消息调度精度 30 秒,进程未运行时不触发。
- 群被动回复窗口 5 分钟 / 5 次,超长任务可能发送失败(可开 proactiveFallback,但消耗主动配额)。
- 群聊历史上下文只回放文本,不含历史附件的图片 / 文件。
- webhookRuntime 为进程内 fire-and-forget,进程崩溃会丢未入会话的消息。

License

MIT
预览分享卡片长什么样 ↓master1Sun/dsh-QQbot
分享 · DeepSeek Harness Hub
master1Sun/dsh-QQbot

把 QQ 官方机器人WebSocket 长连接模式接入本机 DeepSeek Harnessdsh。

回到顶部