Repository navigation
Releases: wufa-cat/dsh-qq-bot
Release list
v1.4.0 — 删掉生图/TTS;修好联网搜索(插件自带 web_search)
dsh-qq-bot v1.4.0
两件事:删掉生图 / 语音合成,把「搜索配了没用」真正修掉。
一、生图 / TTS 整块删除
按你的要求,不再保留:
- 配置里的
media(tts / image) - 群指令
/画、/语音 - 模型标记
[画图:…]、[语音:…] - 界面「多模态」卡片、模型自动识别下拉
- 权限项
access.features.image/.tts - 接口
/qqbot-runtime/media、/qqbot-runtime/models lib/media.js整个文件
旧配置里残留的 media: 块会被 schema 忽略,不影响启动;想干净就手动删掉那几行。
二、搜索为什么配了没用(真根因)
不是 key 的问题,也不是权限的问题:web_search 工具根本没挂到聊天 agent 上。
DSH Web 面(桌面版)把工具从 host 行搬进了「agent 预设」(@deepseek-ai/dsh-web-app 里
- id: tool-web / disabled: true)。GUI 里的会话走会话创建流程,会挂 standard 预设,所以你在
Harness 里能搜;而本插件是用 agents.create() 自己建聊天 agent 的,不经过预设流程 ——
实测那个 agent 的作用域里只有 working_directory 一个工具,tools.get('web_search') === undefined。
于是提示词说着「可以调用 web_search」,模型手上却没有 → 它按训练里的习惯自己编
<invoke name="WebFetch"> 之类的调用语法,然后被当正文发到群里。
(顺带说清楚:ctx.tools.restrict() 也必须用 agentCtx.tools 调,用 ctx.get('tools') 会抛
“requires a scoped context (agent.ctx)”。1.3.x 里那条 restrict 一直是失败的,只是被 catch 住了。)
修法:插件自己注册 web_search
1.4.0 在宿主全局层注册了一个 web_search 工具(lib/webtool.js):
- 检索走后端
ctx.web(searchProvider还是 profile 里配的deepseek-search-api/deepseek-official,凭据不变); - 全局层的工具会被聊天 agent 自动继承;
- 关掉
tools.webSearch时,per-agentrestrict({ allow: [] })会把它遮掉; - 顺手加了
tools.guard():bash/write/edit/subagent这类危险工具在聊天会话里执行即拒绝(预设里的 scoped 工具 restrict 遮不掉,guard 可以)。
状态接口里能看到注册结果:
"web": { "available": true, "tool": { "ok": true, "reason": "已注册" } }三、界面里改工具开关,现在不用重启了
之前 bots[] 虽然是 volatile,但插件在启动时就把 botDef 对象抓在手里了;界面保存后配置里换成了新对象,运行中的 runtime 还读旧的那份 —— 所以「我明明把搜索打开了,bot 那边还是关的」。
1.4.0 起:
BotRuntime.effectiveToolPolicy()/hub.canUse()/isAdmin()都通过getBotDef()现读配置里的这条 bot;- 工具策略变化会被检测到(
toolsKey),下一次对话自动重建会话,白名单立刻按新值下发。
也就是说:界面里拨 webSearch → 群里接着说一句话,就按新配置跑,不用重启 Harness。
(media 之外的其他字段,改动仍建议重启后再观察。)
四、现在怎么判断搜索到底行不行
群里发:
/搜索
会回三行,其中第二行是真的:
🔎 联网搜索 [千早爱音]:开(跟随配置)
聊天 agent 实际工具:✅ 有(web_search 已挂上)
配置里打开:bots[].tools.webSearch;API Key 在「设置 → 插件 → 网页搜索」
界面「运行状态」卡片、/qqbot-status 里也有同样的 toolsAvailable。
✅ 有→ 搜索能用;再不行就是凭据问题(DeepSeek Key),状态卡会提示;❌ 没有→ Harness 没把web_search给聊天 agent,检查 profile 里@deepseek-ai/dsh-tool-web/web是否加载。
升级
dsh plugin --profile desktop add https://github.com/wufa-cat/dsh-qq-bot/releases/download/v1.4.0/dsh-qq-bot-1.4.0.tgz装完完全退出并重启 Harness。
提示:界面里改
bots[](工具开关、权限)这类非 volatile 字段后,重启 Harness 才生效;/搜索 on|off这种群指令是立即生效的。
出处
本插件是 ezoiLZH/QQ-bot(https://github.com/ezoiLZH/QQ-bot)的 DeepSeek Harness 移植版。
原仓库没有 LICENSE;本插件新增代码以 MIT 发布,原项目代码/素材版权仍归原作者,再分发请保留出处。
v1.3.2 — 工具调用语法不再发到群里;提示词按真实可用性下发
dsh-qq-bot v1.3.2
修「搜东西的时候,AI 把工具调用语法原样发到群里」这个丢人问题。
<|DSML| calls>
<|DSML| invoke name="WebFetch">
<parameter name="url">https://github.com/...</parameter>
</|DSML| invoke>
为什么会这样
两件事叠在一起:
- 机器人配置里开了
tools.webSearch,插件就无条件往提示词里写「可以调用 web_search」; - 但聊天 agent 里实际没有这个工具(工具白名单没放行成功 / profile 没装 web 服务)→ 模型只能凭提示词「自己编」调用语法,然后被当成普通文本发出去。
修了什么
① 提示词只在工具真的可用时 advertise
applyChatToolPolicy() 的返回值现在会记到 Brain 里(brain.toolAvailability(botDef)):
只有 agent 里真的拿到 web_search 才注入「可以调用 web_search」;
拿不到就换成:
【联网】本轮没有可用的联网工具:不要写 、antml:…、tool_calls 这类调用语法,直接说明你查不到实时信息。
② 发送前清理工具语法(兜底)
BotRuntime.stripToolCalls() 会删掉 <tool_calls> / <function_calls> / <invoke …> / <parameter …> / <antml:*> 整块和落单标签(可嵌套)。
清理后如果正文什么都不剩,就直接不发,记一条 skip「回复只剩工具调用语法」,不再把 <|DSML| calls> 这种发到群里。
③ 状态里看得见「到底有没有放行」
/qqbot-status 每个机器人新增 toolsAvailable: { webSearch, webFetch } | null;状态卡在「搜索开着但没放行」时直接红字提示。
关于你贴的那两条媒体报错
查了 NapCat 日志,时间线是这样的:
| 时间 | 事件 |
|---|---|
| 15:31:44 | /语音 → TTS 未启用 |
| 15:33:14 / 15:33:45 | /语音 → TTS 缺少 apiKey |
| 16:03:23 | /画 → 生图未启用 |
| 16:05:39 | 你在界面里把 image 启用 + 填 key 并保存 |
| 16:08:02 / 16:10:12 | 群里已经能发 [图片](生图成功) |
也就是说那两条报错都发生在保存配置之前;1.3.1 的「媒体配置现读」已经生效——保存后生图就好使了。
TTS 还没成功过,是因为 SiliconFlow 的 /audio/speech 在你当前网络一直不返回(我直连 curl 也一样),跟插件无关;1.3.1 的超时提示会明确告诉你这件事。
升级
dsh plugin --profile desktop add https://github.com/wufa-cat/dsh-qq-bot/releases/download/v1.3.2/dsh-qq-bot-1.3.2.tgz装完完全退出并重启 Harness。
重启后可以自查:curl 一下 /qqbot-status,看 toolsAvailable.webSearch 是不是 true。是 false 就说明 Harness 那边没把 web_search 给聊天 agent,需要检查 profile 里的 web 插件。
出处
本插件是 ezoiLZH/QQ-bot(https://github.com/ezoiLZH/QQ-bot)的 DeepSeek Harness 移植版,经原作者许可发布。
原仓库没有 LICENSE;本插件新增代码以 MIT 发布,原项目代码/素材版权仍归原作者,再分发请保留出处。
v1.3.1 — 保存 key 后仍报「缺少 apiKey」已修;TTS 超时提示;/help 重写
dsh-qq-bot v1.3.1
修「/语音 报 TTS 缺少 apiKey」和 /help 太旧这两件事。
1. 保存了 key 还是提示「缺少 apiKey」
原因:媒体服务在插件加载时把 media.tts / media.image 快照住了。你在界面里把 key 填上并保存,配置写进了 cordis.patch.yml,但运行中的实例还是旧的空 key,于是 /语音 报「TTS 缺少 apiKey」,生图同理(「生图缺少 apiKey」)。
修法:createMediaService 改为每次调用现读配置(getMedia: () => config.media),status() / speak() / draw() 都现读。
现在界面里填完 key 保存,下一条 /语音 就能用,不用重启/重载。
已验证:同一个实例,先 speak() → TTS 缺少 apiKey;把配置里的 key 补上(模拟界面保存)→ 立刻 ok, 音频字节;draw() 同路径同样通过。
2. TTS 卡住时不再干等
/audio/speech 的超时从 120 秒改成 45 秒,超时会给出人话:
TTS 上游 45s 没返回(模型「…」/音色「…」或额度有限制)。换个模型或音色,或者换一家供应商试试。
顺带确认:同一把 key 调 SiliconFlow 的 /images/generations 是正常的(生图通),只有 CosyVoice2 的语音接口在当前网络下一直不返回——这不是插件的问题,换模型/音色或换供应商即可。
3. /help 重写
补上了之前漏掉的 /收图 /搜索 /画 /语音 /reload,并写清了权限:
/help - 显示此帮助
/ping - 测试延迟
/time - 服务器时间
/echo 文本 - 原样复述
/roll - 掷骰子 (1-100)
/calc 表达式 - 四则运算
/表情 [分类] - 列出表情分类 / 直接发一张
/收图 [分类] - 把图片收进表情包
/画 描述 - 生成一张图(需配置生图 key)
/语音 文本 - 合成一条语音(需配置 TTS key)
/搜索 on|off|跟随 - 联网搜索开关(跟随=回到配置)
/ai on|off|status [--all] - 开关/查看 AI 回复
/clear [N] - 清空记忆,或只保留最近 N 条
/reload - 重读人设与表情包
🔐 /收图 /搜索 /画 /语音 /ai /clear /reload 能否使用由插件里的「权限」决定
(默认仅管理员;也可以在配置里按功能放开给全员或指定 QQ/群)。
4. 新接口
GET /qqbot-runtime/media → 当前 ASR 已删,返回 TTS / 生图的 enabled、configured、model、baseURL,排障用(界面「就绪」也是同一套判断)。
升级
dsh plugin --profile desktop add https://github.com/wufa-cat/dsh-qq-bot/releases/download/v1.3.1/dsh-qq-bot-1.3.1.tgz装完完全退出并重启 Harness;软链安装的话重启即可。
出处
本插件是 ezoiLZH/QQ-bot(https://github.com/ezoiLZH/QQ-bot)的 DeepSeek Harness 移植版,经原作者许可发布。
原仓库没有 LICENSE;本插件新增代码以 MIT 发布,原项目代码/素材版权仍归原作者,再分发请保留出处。
v1.3.0 — 按功能分权 / 名单多行输入 / 生图TTS自动识别模型 / 去掉 ASR
dsh-qq-bot v1.3.0
四个界面/权限上的重构,都是按你的原话改的:
- 权限按功能分别设置(不再是「谁可以调用功能」一个总开关)
- 黑白名单改成多行文本填写(逗号能正常打出来了,也支持
群:群号) - 生图 / TTS 自动识别模型(删掉那个莫名其妙的「模型来源(只用于拉取列表)」)
- 删掉 ASR 语音转文字(QQ 自带够用)
- 运行状态卡改只读(「搜索」出现两次、
override看不懂,都是这里造成的)
1. 每个功能单独设权限
bots[].access 现在是「默认 + 每功能覆盖」:
access:
mode: admin # 默认:all 全员 | admin 仅管理员 | list 仅白名单
users: [] # 默认白名单 QQ
groups: [] # 默认白名单群号
denyUsers: [] # 默认黑名单,永远优先
denyGroups: []
features: # 每功能覆盖;mode: inherit = 跟随默认
image: { mode: all } # /画 + [画图:…]
tts: { mode: list, users: ["10001"], groups: ["123456789"] } # /语音 + [语音:…]
sticker: { mode: admin } # /收图
search: { mode: inherit } # /搜索
manage: { mode: admin } # /ai /clear /reload- 判定顺序:黑名单 → 管理员 → 该功能 mode(inherit 用默认 mode)
- 名单条目:QQ 号,或
群:群号 - 模型自主生成时按触发者判权限;没权限就把标记抹掉,不会原文发出去
界面:机器人卡片里每个功能一行,选范围 + 填名单;黑名单折叠在「黑名单(永远优先)」里。
2. 名单填写不再吃逗号
原来是「边输入边 split 再 join」,你打一个逗号就被规范化吃掉了。
现在输入框保留你输入的原文(多行文本框),只把解析结果写进配置:
- 换行、逗号、顿号、分号都能分隔;
群:123456/group:123/g:123识别为群号,其余按 QQ 号;- 输入框显示时群号会自动带
群:前缀。
3. 生图 / TTS 自动识别模型
「多模态」卡片里只要填了接口地址(到 /v1)+ API Key,就自动拉一次上游模型列表(改 key 会防抖重拉,700ms),下拉直接选;也能手动点「拉取模型」,或干脆手填模型名。
那个「模型来源(只用于拉取列表)」的机器人级卡片已删除——它当初是为了给「聊天模型」查 id,但聊天模型本来就该在 DSH 设置里选,纯属多余。
4. 删掉 ASR
media.asr 整块移除:不再调 /audio/transcriptions,群里发语音不再转文字。
QQ 客户端自带语音转文字,插件不重复造轮子;也省一份 API 额度。
如果你之前配了 media.asr,配置里留着这段不影响启动(会被忽略)。
5. 运行状态卡变成只读
之前状态卡上有 搜索: 关(override) 三个按钮和 AI: 开/关,而机器人卡片里又有一份「工具权限」的搜索开关——同一个东西出现在两处,还冒出 override 这种词。
现在:
- 状态卡只显示:连接灯、重连/失败次数、计数、最近错误、搜索与 AI 的当前状态;
- 真正改运行时状态用群指令:
/搜索 on|off|跟随、/ai on|off、/clear; - 「工具权限」那一份是配置(决定给模型哪些工具),只有一处。
升级
dsh plugin --profile desktop add https://github.com/wufa-cat/dsh-qq-bot/releases/download/v1.3.0/dsh-qq-bot-1.3.0.tgz装完完全退出并重启 Harness。软链安装的话重启即可。
出处
本插件是 ezoiLZH/QQ-bot(https://github.com/ezoiLZH/QQ-bot)的 DeepSeek Harness 移植版,经原作者许可发布。
原仓库没有 LICENSE;本插件新增代码以 MIT 发布,原项目代码/素材版权仍归原作者,再分发请保留出处。
v1.2.2 — 修复软链安装导致插件不加载(设置项消失 / 接口 404)
dsh-qq-bot v1.2.2
修一个会让插件整个消失的坑:用「目录软链」安装时缺少 ws 依赖,Host 侧 import 直接失败 → 插件行不加载 → 设置里「QQ 机器人」整项不见、接口全 404。
原因
插件依赖 ws(OneBot WebSocket 客户端)。两种安装方式:
- tarball 安装:pnpm 会把
ws一起装上 → 正常; - 目录软链安装(
dsh plugin add /path/to/dsh-plugin,开发时常用):pnpm 只建软链,不会安装被链目录的依赖 →import WebSocket from 'ws'报ERR_MODULE_NOT_FOUND。
Host 侧 import 失败后,整行插件不生效:插件页没有 QQ 机器人,设置侧栏的分区也没了,所有 /qqbot-* 接口 404。
(页面刷新只更新前端,所以会出现「界面还在但接口 404」这种半新半旧的状态。)
修法
lib/onebot.js 不再在顶层硬 import ws:
- 优先
await import('ws')(tarball 安装时走这条); - 没有
ws就退回 Node 22+ 自带的 WebSocket,并把on('open'|'message'|'close'|'error')适配成ws风格; - message 数据统一转字符串(ArrayBuffer / Buffer / string 都吃)。
因此目录软链安装现在也能直接跑,不需要额外装依赖。
已验证
- 无
ws的 profile + 目录软链 → 插件正常加载,连接真实 NapCat:connected: true, attempts: 1, failures: 0 - 同一路径下
get_login_info/get_version_info往返正常(证明 echo 关联与发送都走通) - tarball 安装路径不变
升级
dsh plugin --profile desktop add https://github.com/wufa-cat/dsh-qq-bot/releases/download/v1.2.2/dsh-qq-bot-1.2.2.tgz装完完全退出并重启 Harness。
如果你本来就用软链(link:)安装,也可以只重启:仓库里已经是修好的代码。
排查口诀
- 插件页/设置里整项不见 → Host 侧没加载,看启动日志里的
failed to import; - 界面在、接口 404 → Host 是旧进程,重启 Harness 而不是刷新页面。
出处
本插件是 ezoiLZH/QQ-bot(https://github.com/ezoiLZH/QQ-bot)的 DeepSeek Harness 移植版,经原作者许可发布。
原仓库没有 LICENSE;本插件新增代码以 MIT 发布,原项目代码/素材版权仍归原作者,再分发请保留出处。
v1.2.1 -存在bug,无法打开
dsh-qq-bot v1.2.1
修掉「界面是新的、接口 404」的半新半旧状态;新增调用权限(全员 / 仅管理员 / 黑白名单)与「输入上游端点自动检索模型」。
⚠️ 升级后请重启 Harness(不是只刷新页面)。Host 侧的代码是进程启动时加载的,只刷新页面会出现「新界面打旧接口 → 404」。
1. 调用权限:全员 / 仅管理员 / 黑白名单
每个机器人新增 access:
bots:
- name: 千早爱音
access:
mode: admin # all 全员 | admin 仅管理员 | list 仅白名单
users: ["10001"] # mode=list 时的白名单 QQ
groups: ["123456789"] # mode=list 时的白名单群(群里任何人都算)
denyUsers: [] # 黑名单永远优先
denyGroups: []管的是「有副作用或花钱」的动作:
/画(生图)、/语音(TTS)——会消耗你的 key 额度;/收图(写表情包目录)、/搜索(切联网)、/ai、/clear、/reload;- 模型自己在回复里写
[画图:…]/[语音:…]:按触发这一轮的人判权限,没权限就不生成,标记会被抹掉(不会把[画图:…]原样发到群里)。
判定顺序:黑名单 → 管理员 → mode。所以管理员始终能用,但被拉黑的人管理员也当不了。
/ai、/clear、/reload 是管理操作,始终只给管理员,不受 mode 影响。
界面:机器人卡片里的「谁可以调用功能」(范围下拉 + 四个名单框,逗号分隔)。
2. 模型自动检索
机器人卡片新增「模型来源(只用于拉取列表)」:
- 填上游 OpenAI 兼容地址(到
/v1)+ API Key; - 点 拉取模型 → 下拉里选一个 → 自动填进上面的「模型」;
- 「多模态」卡片的 ASR / TTS / 生图也各有一个「拉取模型」按钮,用它们各自的端点/key。
实现在 lib/media.js 的 listModels():GET {baseURL}/models,兼容 data[] 与 models[] 两种返回,去重排序;key 支持明文或环境变量名。
它只用来查模型 id,不参与对话调用——对话仍然走 DSH 的 provider/model 选择。
对应接口:POST /qqbot-runtime/models,body { baseURL, apiKey | apiKeyEnv }。
3. 关于「机器人怎么调用生图」
两条路,都受上面的权限约束:
- 显式指令:群里发
/画 一只戴墨镜的猫、/语音 今天也要开心呀。 - 模型自主:模型在回复里单独写一行
[画图:…]/[语音:…],插件展开成图片/语音发出去;只有media.image.enabled/media.tts.enabled且配了 key 时,这条提示才会注入给模型。
4. 升级方式
dsh plugin --profile desktop add https://github.com/wufa-cat/dsh-qq-bot/releases/download/v1.2.1/dsh-qq-bot-1.2.1.tgz装完重启 Harness。
5. 出处
本插件是 ezoiLZH/QQ-bot(https://github.com/ezoiLZH/QQ-bot)的 DeepSeek Harness 移植版,经原作者许可发布。
原仓库没有 LICENSE 文件;本插件新增代码以 MIT 发布,原项目代码/素材版权仍归原作者,再分发请保留出处。
v1.2.0 — 工具白名单/联网搜索、巡检、规则、定时、记忆、ASR/TTS/生图
dsh-qq-bot v1.2.0
新增:工具白名单 / 联网搜索、对话巡检、关键词规则、定时消息、记忆管理、语音转文字 / 语音合成 / 生图。
升级:dsh plugin --profile <profile> update dsh-qq-bot(或先 remove 再 add 同一个 tarball / 仓库地址)。
1. 工具白名单 + 联网搜索(P0)
聊天档的模型现在默认一个工具都不给——群里任何人说话都可能触发模型,不该让它跑命令、读写文件或开子代理。
- 配置位置:插件页 → 每个机器人卡片里的「工具权限」
webSearch:允许web_search(默认关)webFetch:允许web_fetch(默认关;打开搜索后才有意义)
- 实现:
ctx.tools.restrict({ allow })只把白名单里的工具挂在聊天会话的 agent 作用域上,不认识的工具名会被过滤,避免restrict抛错。 - 运行时也用指令切换:
/搜索 on|off(管理员),会在下一轮重建会话时生效;/搜索不带参数看当前状态。 - 界面「运行状态」卡片里也有开/关/跟随配置按钮,不需要改配置文件。
搜索的凭据从哪来
搜索后端是 Harness 内置的 DeepSeek 官方搜索(deepseek-official),凭据不是这个插件管的:
- 用 DeepSeek 账号登录 Harness → 自动可用;
- 或者配环境变量
DEEPSEEK_API_KEY; - 或者「设置 → 插件 → 官方 → 网页搜索」里填 Key(支持 Messages 搜索 / 新版 Search & Fetch API)。
deepseek-ai/DeepSeek-V3),搜索仍会 401 —— 因为搜索走的是 DeepSeek 官方接口,需要单独的 DeepSeek 凭据。插件界面会直接提示这一点。
💰 成本提醒:Messages 模式搜索 = 一次完整的模型调用(超时 60s、最多 5 次搜索),不是免费附加功能。
2. 对话巡检面板
插件页「对话巡检」+「运行状态」:
- 绿色/红色状态灯:是否连上 OneBot、重连次数、最近错误、已运行时长;
- 计数:收到消息 / 发出回复 / 跳过 / 错误;
- 最近 60 条事件:谁在哪个聊天说了什么、bot 回没回、为什么跳过(冷却、没被 @、AI 关闭、聚合中…);
- 聊天记录尾巴:直接下拉选一个
data/<chat>.json,看最近 20 条。
数据只存在内存环形缓冲(400 条),重启即清空;聊天记录本体仍在 data/。
3. 收图入库
群里发「/收图 分类名」(可带图片一起发,或回复一张图片再发指令),管理员即可把图收进 stickers/<机器人>/<分类>/。
- 单张 ≤ 5 MB,支持 png/jpg/gif/webp/bmp;
- 一次最多收 4 张;
- 收完可直接
/表情 分类名试发。
4. 关键词规则回复
插件页「关键词规则」:命中关键词直接回,不进模型(快、省钱、不会被上下文影响)。
- 匹配方式:包含 / 完全相同 / 正则;
- 回复里可用
{user}(昵称)、{qq}、{bot}(机器人名字)占位符; - 可选只对某几个机器人生效;
- 规则优先于模型,但不拦指令(指令先处理)。
5. 定时消息
插件页「定时消息」:每天或指定星期,在 HH:MM 往一个群/私聊发固定内容。
- 目标写法:
group:群号或private:QQ号; - 内容里
{date}{time}{weekday}会被替换; - 每 20 秒检查一次,同一天同一分钟只发一次;
- 机器人必须在线,否则跳过并记日志。
6. 记忆管理界面
插件页「长期记忆」:直接编辑 data/memory-<chat>.json。
- 一行一条摘要,保存时自动补日期;
- 新会话建立(种子)时会注入这些摘要;
- 也可以删除整份记忆。
7. 语音转文字(ASR)/ 语音合成(TTS)/ 生图
插件页「多模态」:三套端点各自填 baseURL + API Key + 模型(OpenAI 兼容接口)。
| 能力 | 接口 | 触发方式 |
|---|---|---|
| ASR | POST /audio/transcriptions |
群里发语音,自动转文字后再进模型 |
| TTS | POST /audio/speech |
/语音 文本,或模型回复里写 [语音:文本] |
| 生图 | POST /images/generations |
/画 描述,或模型回复里写 [画图:描述] |
- Key 可以直接填,也可以只填环境变量名(
apiKeyEnv),避免把密钥写进配置文件; - 默认 baseURL 是 SiliconFlow(
https://api.siliconflow.cn/v1),默认模型:FunAudioLLM/SenseVoiceSmall(ASR)、FunAudioLLM/CosyVoice2-0.5B(TTS)、Kwai-Kolors/Kolors(生图)——都只是默认值,换成你自己的即可; - 没启用/没配 key 时,
[语音]保留占位、/画和/语音会直接报错,不会静默失败; - 音频/图片以 base64 内联发给 NapCat,容器里也能发出去。
8. 新增 / 变更的接口
| 路由 | 说明 |
|---|---|
GET /qqbot-status |
状态灯数据(连接、计数、工具策略、搜索可用性) |
GET /qqbot-inspect?limit=&bot=&chat= |
巡检事件 + 汇总 |
POST /qqbot-runtime/search |
运行时切换搜索(enabled 或 followConfig) |
POST /qqbot-runtime/ai |
运行时切换 AI(可按 chat) |
GET /qqbot-files/memory/list |
记忆文件列表 |
GET /qqbot-files/memory/read?name= |
读取记忆(纯文本) |
POST /qqbot-files/memory/save |
保存记忆 |
POST /qqbot-files/memory/delete |
删除记忆 |
GET /qqbot-files/chats |
聊天记录概况 |
GET /qqbot-files/chat/tail?chat=&limit= |
聊天记录尾巴 |
9. 新增配置项
bots:
- name: 千早爱音
tools:
webSearch: true # 允许 web_search
webFetch: false # 允许 web_fetch(需先开搜索)
rules:
- enabled: true
pattern: 在吗
mode: contains # contains | exact | regex
reply: 在的 {user}
bots: [千早爱音]
schedules:
- enabled: true
label: 早安
at: "08:00"
days: [1, 2, 3, 4, 5] # 1=周一…7=周日;留空=每天
bot: 千早爱音
chat: group:123456
text: 早上好呀~ {weekday}
media:
asr: { enabled: true, baseURL: https://api.siliconflow.cn/v1, apiKey: "", apiKeyEnv: SILICONFLOW_API_KEY, model: FunAudioLLM/SenseVoiceSmall, language: zh }
tts: { enabled: true, baseURL: https://api.siliconflow.cn/v1, apiKey: "", model: FunAudioLLM/CosyVoice2-0.5B, voice: alex, format: mp3 }
image: { enabled: true, baseURL: https://api.siliconflow.cn/v1, apiKey: "", model: Kwai-Kolors/Kolors, size: 1024x1024 }10. 致谢与出处
本插件是 ezoiLZH/QQ-bot(https://github.com/ezoiLZH/QQ-bot)的 DeepSeek Harness 移植版,经原作者许可发布。
- 原项目:https://github.com/ezoiLZH/QQ-bot
- 作者:ezoiLZH
- 本移植版:https://github.com/wufa-cat/dsh-qq-bot
原仓库没有 LICENSE 文件;本插件新增代码以 MIT 发布,原项目的代码/素材版权仍归原作者,再分发时请保留上述出处。
dsh-qq-bot v1.1.0
dsh-qq-bot v1.1.0
仓库:https://github.com/wufa-cat/dsh-qq-bot
把 QQ 接入 DeepSeek Harness 的插件,macOS 与 Windows 开箱即用:装好插件,在界面里点几下就能跑起来,不需要 clone 仓库、不需要写 YAML。
本项目是 QQ-bot 的非官方移植版,感谢原作者 ezoiLZH 的设计:人设协议、表情包、消息聚合、SKIP/LEAVE 冷却与群内指令都源自原项目。
安装
dsh plugin --profile desktop add ./dsh-qq-bot-1.1.0.tgz
# 或
dsh plugin --profile desktop add https://github.com/wufa-cat/dsh-qq-bot/releases/download/v1.1.0/dsh-qq-bot-1.1.0.tgz装完完全退出并重启 Harness。
三步开箱
- 准备 Docker:Windows 装 Docker Desktop;macOS 用 Docker Desktop 或
brew install colima docker docker-compose。 - 设置 → QQ 机器人 → 初始化目录(自动生成
~/dsh-qq-bot与 NapCat 的 compose)→ 环境自检 → 启动服务 → 用机器人 QQ 扫码。 - 添加机器人:QQ 号 / 名字 / 人设 / 管理员,保存后群里
@机器人 /ping。
这一版有什么
- 每个 (机器人, 群/私聊) 一个持久 agent 会话;人设走系统提示词
- 消息聚合、四级 SKIP 冷却 + 频率分层、
[LEAVE]暂离 - 人格(
persona/*.md)在设置页直接编辑,可新建/删除/重命名 - 表情包按
stickers/<机器人>/<分类>/管理:界面上传、删除、展开查看;模型写[动画表情:分类]即发图(用 base64 发送,规避 NapCat 容器读不到宿主路径) - OneBot 服务一键启停 + 环境自检 + 扫码链接;目录一键打开;清理未使用镜像(macOS 还可删 colima 虚拟机)
- 跨平台:Windows 走 Docker Desktop /
docker compose,打开目录用资源管理器,不碰 WSL2 虚拟机 - 群内指令:
/help /ping /time /表情 /echo /roll /calc /clear /ai /reload
已知限制
- 命令必须空格分隔(
@bot /ping) - 同一时间只能登录一个 QQ(机器人号登在 NapCat 里)
- 原项目未附带许可证,本移植版仅对新增代码使用 MIT
MIT License(仅新增部分,见 NOTICE)。