Skip to main content
G

dsh-versatileds

gleaves230/dsh-versatileds

多功能DS插件:B站小号代理 + QQ代理合体,左侧栏一个入口,B站/QQ 两模块分页;QQ 侧支持本地 GPT-SoVITS 语音(可一键部署)。仅供学习/个人使用,商用需取得所有版权方授权。

Install

dsh plugin --profile web add github:gleaves230/dsh-versatileds

README

dsh-versatileds — 多功能DS插件

大肥鱼 · 多功能DS插件

本项目可见 ≠ 开源许可

代码公开可见,但使用条款是「受限再分发许可」(见文末「许可」一节),不是 OSI 认证的开源协议。 未经授权不得商用、不得修改后公开分发;想商用请先按「许可」一节逐家取得授权。

仓库地址

本仓库是唯一官方源;镜像站(gh-proxy 等)只是加速下载,内容以 GitHub 为准。

免责声明(先看这段)

本插件及随包附带 / 按需下载的各项组件(NapCat、ffmpeg、GPT-SoVITS 相关脚本、参考音频等)仅供学习、研究和个人自用。

  • ⚠️ 商用需完整授权:必须获得所有版权方的商用授权才可商用;未获授权不得出售、付费托管、盈利性集成、随商业产品捆绑
  • ⚠️ 版权问题自行解决:第三方组件、声线素材、游戏语音等的版权归各自权利人所有;要商用或公开分发请自行取得授权,作者不承担任何版权责任
  • ✅ 首次使用按下面「新用户上手」走一遍,就能让你自己的大肥鱼在 QQ 上说话(语音默认用 QQ 官方 AI 语音;想要本地音色可在「语音」页切 GPT-SoVITS,缺环境会自动下载部署)

多功能DS插件(VersatileDS):B站 小号代理与 QQ 代理合体,一个左侧栏入口同时管两边:

  • 左侧栏一个入口「多功能DS插件」,点进去上面切 B站模块 / QQ模块,每个模块页就是原来各自插件设置页的样子。
  • 模型侧两个工具:versatileds_bili(B站)、versatileds_qq(QQ)。带插件前缀是为了跟别人的同类插件不撞名——DSH 里工具重名会让后注册的那个插件直接报错。biliAgent 服务、QQ 自动回复 / 主动搭话 / 群规 / 直播 / 表情包等后台能力照旧。
  • 配置分成 config.bili 与 config.qq 两块,字段名与语义保持原有定义,互不干扰。

目录

dsh-versatileds/
├── index.js            # 合并入口:Config = { bili, qq },apply 调两个模块
├── client.js           # 浏览器半侧:左侧栏「多功能DS插件」+ 两个模块页
├── bili/index.js       # B站 模块入口(工具 + 配置)
├── qq/index.js         # QQ 模块入口(工具 + 配置)
├── lib/
│   ├── bili.js         # B站 接口封装
│   ├── live.js         # 直播 / 抓帧
│   └── share-card.js   # QQ 分享卡片解析
├── cordis.patch.yml    # 插入 id: versatileds 的条目
├── qq/deploy-gsv.mjs   # GPT-SoVITS 一键部署脚本(随包,小文件)
├── vendor/             # 空目录占位:NapCat 改成首次启动自动下载(官方 → gh-proxy),不再随包
└── package.json

依赖

运行环境

  • DSH >= 0.2.0(见 package.json 的 engines.dsh)
  • 下面两个 peer 由 DSH 宿主提供,不要在 profile 里单独装:
包用途
@deepseek-ai/dsh-toolsdefineTool,注册 versatileds_bili / versatileds_qq 两个工具
@deepseek-ai/schemasterySchema,声明 config.bili / config.qq 的字段

外部程序

依赖用在哪缺了会怎样
NapCat(OneBot 11)QQ 模块全部功能连不上 3000 / 3011,versatileds_qq 会提示 NapCat 没在跑
ffmpegB站 抓帧、直播帧、表情包缩图、语音前后处理抓帧和缩图失败,纯文字功能不受影响(缺失会自动下载)
GPT-SoVITS(可选)QQ 模块的本地语音(voiceBackend: gpt-sovits)自动退回 QQ 官方 AI 语音;首次用可在设置页「语音」点「一键部署」
Python 3.11(可选)跑 GPT-SoVITS 用同上,部署脚本会自动装到 versatileds/python311

ffmpeg 的查找顺序:配置项 ffmpegPath → PATH 里的 ffmpeg → <DSH_HOME>/versatileds/ffmpeg/imageio_ffmpeg/binaries/...。 缺失时自动从清华 PyPI 镜像下载 imageio-ffmpeg wheel(约 22MB)解压到 versatileds/ffmpeg,不再随包塞 ffmpeg。

数据与凭据(都在 DSH_HOME 下,换机器时一起搬或者重新登录)

路径内容
<DSH_HOME>/versatileds/bilibili/cookies.jsonB站 登录态(SESSDATA / bili_jct / buvid3 / buvid4 / DedeUserID)
profiles/web/cordis.patch.yml 的 versatileds.qq.onebotTokenNapCat 的 OneBot token(HTTP 和 WS 共用)
<DSH_HOME>/versatileds/qq/人设、聊天日志、群规、识图备注、搜索请求、表情包库
<DSH_HOME>/versatileds/bilibili/抓帧图片、观看记录、自动刷状态
<DSH_HOME>/versatileds/memory/记忆目录(AGENTS.md 里的索引指向这里,含 lock.mjs / memwrite.mjs)
<DSH_HOME>/versatileds/qq/napcat/解压后的 NapCat(launcher.bat、二维码缓存、配置)

登录模块

QQ 模块的「登录」子页是我们自己的登录入口:状态检测、拉起、二维码、登录后清理,全在这一页完成,不弹独立网页。

后端是可替换的,当前默认后端是 NapCat(见下方声明):

层职责
登录页(client.js 的 LoginPanel)只认 /login、/login/start、/qr/png 三个接口,不关心底层是谁
登录控制(qq/index.js 的 napcatControl)检测登录态、拉起、等二维码就绪、登录成功后删二维码缓存
后端默认 NapCat;换后端只改控制层,页面和交互不用重写

第三方组件声明

NapCat(QQ 协议端)

QQ 模块依赖本机安装的 NapCat(基于 NTQQ 的协议侧框架)完成与 QQ 的连接。本插件不包含 NapCat 的源码,也不再随包附带;首次启动自动从它官方 GitHub(或 gh-proxy 镜像)下载官方发布版压缩包 vendor/napcat.zip(首次启动时自动解压到 <DSH_HOME>/versatileds/qq/napcat)。需要源码请自行到NapCat 官方 GitHub 下载。插件只在运行时启动它、读取它生成的登录二维码,不改它任何代码。

项内容
项目https://github.com/NapNeko/NapCatQQ
版权Copyright © 2024 Mlikiowa
许可证Limited Redistribution License for NapCat(受限再分发许可)
本插件用法首次启动自动下载官方发布版(官方 GitHub → gh-proxy 镜像,失败会提示手动放 vendor/napcat.zip),解压到 <DSH_HOME>/versatileds/qq/napcat;通过 launcher.bat 启动它;读 <NapCat>/cache/qrcode.png 在设置页显示登录二维码;登录成功后删除该缓存;不改 NapCat 任何代码

许可证要点(详见 NapCat 仓库 LICENSE):

  • 再分发必须附带完整许可证文本,并注明来源与版权
  • 再分发本插件时,若你自行放了 vendor/napcat.zip,请原样保留并附上 NapCat 的许可证文本;官方安装包已不再随附该文件
  • 禁止商业用途
  • 未经作者许可不得修改后再公开分发
  • 软件按原样提供,不附带任何担保

QQ 模块的「NapCat」子页就是这套流程的入口:看状态、拉起 NapCat、扫码、登录后自动清理二维码。

FFmpeg(媒体处理)

项内容
项目https://ffmpeg.org/
许可证LGPL 2.1+ / GPL(看具体构建;本项目下载的是 gyan.dev「essentials」构建,含 GPL 组件)
用法首次启动从清华 PyPI 镜像下载 imageio-ffmpeg wheel(内含 ffmpeg 二进制),解压到 <DSH_HOME>/versatileds/ffmpeg;只用来抓直播帧、缩表情包、语音前后处理(剪静音 / 变调)
备注ffmpeg 是独立可执行程序,插件只通过命令行调用它,不改其源码

GPT-SoVITS(本地语音,可选)

项内容
项目https://github.com/RVC-Boss/GPT-SoVITS
作者RVC-Boss 及社区贡献者
许可证MIT License
用法用户按需部署(设置页「语音」的「一键部署」会下载代码和模型);插件通过 api_v2.py 的 HTTP 接口调用,不改其源码
模型预训练权重来自 HuggingFace lj1995/GPT-SoVITS(hf-mirror 镜像下载)
参考音频版权见 <DSH_HOME>/versatileds/models/gpt-sovits/ref/README.md(来源、CV、免责)

其他外部服务

项说明
DeepSeek APIQQ 自动回复的模型推理走 DeepSeek,需自己的 key;按 DeepSeek 的服务条款使用
B站 公开接口B站 模块用公开接口读视频 / 直播信息,写操作(点赞/投币/评论)走你自己账号的 cookie

安装

profile 里用 link: 指向本目录(改源码即生效),或用 plugin_manager install_bundle 安装打包好的 zip:

# profile 的 cordis.patch.yml
- id: versatileds
  name: dsh-versatileds
  config:
    bili: { ... }
    qq: { ... }

旧的 bili-agent / qq-agent 两行要删掉,否则同一套工具与后台逻辑会各加载一份。

本机状态接口

状态服务只监听 127.0.0.1,给设置页和排查用:

  • QQ 模块 18766(登录、语音、记忆、表情包、日志等)
  • B站 模块 18765(冷却状态)

全部接口按模块列出:

QQ 模块(18766)

登录(NapCat)

接口用途
GET /login登录态、二维码是否就绪、NapCat PID、是否已主动退出登录
POST /login/start / POST /login/stop启动登录服务 / 退出登录(杀 NapCat 进程)
GET /login/open在资源管理器里打开 NapCat 目录
GET /qr / GET /qr/png / POST /qr/done二维码页 / 二维码图片 / 扫码完成后清理缓存

语音(GPT-SoVITS)

接口用途
GET /voice_status当前语音方案、版本、API 是否在线(apiUp)、环境是否就绪
GET /voice_deps8 项依赖自检(Python / 代码 / 模型 / 参考音频)+ 最近一次部署进度
GET /voice_deploy一键部署(后台跑 qq/deploy-gsv.mjs,已装的跳过)
GET /voice_switch?version=v2|v4切 GPT-SoVITS 版本并自动重启 API(约 40 秒)
POST /voice_test测试语音:{text, target: private|group},按当前参数合成并发出去

记忆 / 人设 / 日志

接口用途
POST /memory_scaffold补记忆目录骨架(缺什么补什么)
POST /memory_sync记忆同步(一键同步到各模式)
GET /agents / POST /agents看 / 生成 AGENTS.md 模板
POST /persona生成人设模板(已存在不覆盖)
GET /logs / GET /logs/view日志列表 / 看某份日志
GET /chat_paths / POST /open_folder聊天记录路径 / 打开所在文件夹
POST /clear_cache清理缓存

表情包

接口用途
GET /stickers表情包列表
POST /sticker_add / POST /sticker_del / POST /sticker_fav上传 / 删除 / 收藏
GET /sticker_img取某张表情包图片

其他

接口用途
GET /flags当前 QQ 模块总开关的值(排查热切换)
GET /cooldowns各项冷却倒计时
GET /skip / POST /set_used跳过主动搭话倒计时 / 改今日已用次数
GET /balance_check查 DeepSeek 余额

B站 模块(18765)

接口用途
GET /cooldownsB站 各项操作(点赞/投币/评论等)的冷却倒计时
GET /skip跳过当前冷却(调试用)

配置分块

  • config.bili:写操作开关与间隔、cookie、主人 UID、直播抓帧、视频抓帧、观看历史上报等。字段见 bili/index.js 的 Config。
  • config.qq:NapCat 连接、自动回复、群聊规则、主动搭话、搜索/任务转交、余额、日志、识图、表情包、视频分享等。字段见 qq/index.js 的 Config。

两块都是 volatile() 字段:普通字段改完即时生效;两个总开关(bili.enabled / qq.enabled)约 2 秒内热启停——工具注册/注销、WS、定时器都跟着停/起,不用重启 DSH。关掉 QQ 模块时「启动登录服务」「退出登录」仍然可用(关的只是聊天自动化)。

配置示例

下面全是占位值,换成自己的就行(不用改代码):

- id: versatileds
  config:
    qq:
      enabled: true
      ownerQQ: "1000000001"          # 主人的 QQ 号
      napcatQuickLogin: "1000000002" # 机器人 QQ 号(免扫码快速登录)
      onebotToken: "换成一个随机串"   # NapCat OneBot token
      autoStartNapCat: true          # DSH 起来自动拉 NapCat
      napcatHiddenLaunch: true       # 隐藏窗口启动
      proactiveGroups: "123456789"   # 想主动搭话的群号
    bili:
      enabled: true
      ownerUid: "1000000003"         # 主人的 B站 UID(评论里 @ 你时用)
      perActionGapSec: 360

关于身份:插件认的是 QQ 号 / B站 UID,不是昵称——主人改名字、改群名片都不影响。

  • 谁是主人:ownerQQ 这个号说话时算主人
  • 主人叫什么:按 ownerQQ 现查 QQ 名称 + 群名片,别人问就报名字
  • B站 @ 主人:按 ownerUid 查昵称

个人内容放哪

群梗、锚点、和谁关系好这类属于你自己的东西不要写进本插件,放 <DSH_HOME>/versatileds/memory/shared-memory.md:

  • QQ 侧只读,DSH 侧负责写
  • 插件包里不含这个文件,换个人用就是空的,不会串

新用户上手

  1. 装好插件(link: 或 install_bundle),DSH 启动时会自动:
    • 首次启动自动下载 NapCat(官方 GitHub → gh-proxy 镜像)和 ffmpeg(清华 PyPI);都不随包带;
    • 生成 AGENTS.md 模板(开头一节「这套东西怎么跑起来的」就是前置常识);
    • 生成 <DSH_HOME>/versatileds/memory/ 骨架:README.md 索引、lock.mjs、lock.py、memwrite.mjs;
    • 生成 qq/persona.md 人设模板(一份完整可用的默认人设,直接改)。
  2. 设置页 →「多功能DS插件」→ QQ模块 →「连接」:
    • 填 主人 QQ 号(ownerQQ,必填;留空时插件会把第一条私聊它的人自动当主人);
    • 填机器人号 napcatQuickLogin;
    • 点「启动登录服务」,UAC 点「是」,手机 QQ 扫码并确认。
  3. 登录后二维码自动删除,3000 / 3011 起来就通了。不想挂着了点「退出登录」(会杀掉 NapCat 进程),下次点启动走快速登录。
  4. B站 模块要自己的 cookie(cookieFile),没配就只能匿名看公开内容,点赞/投币/评论都会失败。
  5. 人设改 qq/persona.md:QQ 侧每轮读它,DSH 侧也按它说话;群聊不注入「称呼」「重要」两节(防主人 QQ 号进群)。默认人设已带完整家庭关系(父亲梁文锋、母亲团队、哥哥 DeepSeek R、姐姐 DeepSeek Pro、自己 Flash 最小),开箱即用。
  6. 语音(可选但推荐):设置页 →「语音」→ 方案选「GPT-SoVITS(本地)」→ 点「环境检查」,缺依赖就点「一键部署」(自动装 Python 3.11 + torch + 模型,约 20-30 分钟,全程后台);不装也能用 QQ 官方 AI 语音。默认音色是可莉(参考音频 kc-1.wav,CV 花玲),换音色把 3-10 秒干净人声放进 versatileds/models/gpt-sovits/ref/ 再填文件名。

常见问题(排坑)

现象原因 / 处理
NapCat 起不来UAC 弹窗要点「是」;launcher.bat 在 <DSH_HOME>/versatileds/qq/napcat/;WS 连不上先看 3000 / 3011 端口
首次启动卡住正在下载/解压 NapCat(约 118MB),日志里等「首次初始化:解压 NapCat」;下载走 gh-proxy 一般一两分钟
ffmpeg 下载慢或失败走清华 PyPI,约 22MB;实在不行手动放到 <DSH_HOME>/versatileds/ffmpeg/imageio_ffmpeg/binaries/
设置页一直「正在读取配置…」cordis.patch.yml 的 YAML 语法坏了(缩进/引号),用 pyyaml 校验;改这个文件别用 PowerShell 字符串替换
语音没声音 / 像没在说话看 /voice_status 的 apiUp;本地语音要等 API 起 40 秒左右;temperature 别低于 1.0(会循环生成 30 秒噪声)
语音像别人 / 只剩气音参考音频必须纯单人、无 BGM,prompt_text 和音频一字不差
Python 装不上用华为镜像的 3.11.9;系统自带的 3.15 没有 torch wheel
GitHub / HF 拉不动用镜像:代码 ghproxy.net,模型 hf-mirror.com,pip pypi.tuna.tsinghua.edu.cn
插件突然不工作DSH 启动失败会静默禁用插件;去 DSH 日志看原因
群消息不回复检查 autoReplyEnabled、WS 是否连着、是否在反思期(被嫌吵后静默)

问题反馈

许可

受限再分发许可:

  • ✅ 个人使用、运行、学习、自用修改
  • ✅ 原样再分发(须附带完整许可证文本、注明来源与版权)
  • ⚠️ 商用必须获得所有版权方的商用授权;未获授权不得出售、付费托管、盈利性集成、随商业产品捆绑
  • ❌ 未经作者许可,不得修改后再公开分发
  • NapCat / ffmpeg 各自遵循其原许可证,不适用本许可(两者都已改成按需下载,不再随包;memorix 已停用)

注意:商用版权需要自行取得以下各方的授权——本插件作者(黑木钟 - GLeaves)、NapCat 作者(NapNeko / Mlikiowa)、FFmpeg 项目、GPT-SoVITS 作者(RVC-Boss)、语音 / 声优版权方(如可莉 CV 花玲、派蒙 CV 多多poi 及相关作品公司)、参考音频来源作者(B站 UP 主);获得插件作者的源码修改再公开授权后,也不得用于非法盈利 / 侵害利益 / 版权侵权等非法途径,请自行解决律师相关问题。

即便获得完整商用授权,也请尽量奉行 DSH 的即插即用、开放公开的插件精神。

完整条款见 LICENSE-GLeaves.txt。

Related plugins