Repository navigation
Releases: Yuuyuko-uu/dsh-fish-buddy
Releases · Yuuyuko-uu/dsh-fish-buddy
Release list
鱼搭子 v0.8.5
插件 0.8.5
陪看的画面:光给路径它不会自己去看
- 🐞 陪看抽帧塞进白板的是「本地文件路径 + 尺寸大小」(白板只能是文字,图贴不进去)。
可模型拿到路径不会主动去读,于是截了图、它其实一张都没看过 —— 白截。 - 现在那一行后面多一句「用 read_image 打开看一眼」。别的都没动:图还是只在白板里给路径,
不额外塞附件,不占上下文。
鱼搭子 v0.8.4
插件 0.8.4
陪看的画面:光给路径它不会自己去看
- 🐞 陪看抽帧塞进白板的是「本地文件路径 + 尺寸大小」(白板只能是文字,图贴不进去)。
可模型拿到路径不会主动去读,于是截了图、它其实一张都没看过 —— 白截。 - 现在那一行后面多一句「用 read_image 打开看一眼」。别的都没动:图还是只在白板里给路径,
不额外塞附件,不占上下文。
鱼搭子 0.8.3
修
游戏模式「攒着」那一档,永远不会自己搭话
- 现象:打游戏时把截图设成「攒着,说话时一起看」,它不会主动开口;只有先发一句话,攒着的图才跟着那一轮一起被带过去。
- 两个原因叠在一起:
- 心跳里「在游戏模式」那个分支是直接 return,而游戏模式的主动搭话只有另一条路才会调 —— 进了游戏模式就永远走不到;
- 就算走到了,开头判的是「配置.截图送法 !== 攒着」,可全项目根本没有这个字段(每张/攒着是挂件的设置,插件只收到每帧的存档/立即标志),永远为真。
- 现在:在游戏模式 → 走游戏搭话那条路;那个不存在的字段判断删掉,改成「最近 90 秒内刚往会话里塞过图就让路」——「每张都说」那档自然被挡住,「攒着」那档能正常搭话。
鱼搭子 v1.7.2
程序 1.7.2 — 2026-11-03
悬浮窗有时候会跑到别的窗口下面去(不是置顶了)
- 🐞 现象:鱼球用着用着就被别的窗口盖住,有时过一会儿自己回来了,有时一直压着。
- 根因:Windows 的「置顶」不是永久属性,只是 z 序里的一个层。
tkinter 的wm_attributes('-topmost')只在设置那一瞬间生效一次,之后没人管:- 别的置顶窗一激活,就排到我们头上;
- 全屏程序切出来、显示器休眠唤醒,标记会丢;
- 自己
withdraw()→deiconify()走一遍(托盘「显示悬浮窗」、切游戏模式),标记也会丢; - 还有一处真 bug:
overrideredirect的球有外层包装窗,普通Toplevel
(设置窗 / 功能窗)没有 —— 以前统一拿GetParent的结果去操作,对后者拿到 0,
等于什么都没做。
- ✅ 新增
_真窗号():有包装窗用包装窗,没有就用它自己。 - ✅ 新增
钉到最上层():直接SetWindowPos(HWND_TOPMOST),带NOACTIVATE | NOMOVE | NOSIZE
—— 只抬手,不抢焦点、不动位置。 - ✅ 新增每 1.2 秒的
_守置顶():只在真的掉了的时候才抬手(还在上面就什么都不做)。 - ✅ 重建浮窗、托盘「显示悬浮窗」、进游戏模式之后都会实钉一次。
- ⚠ 判断「掉了」只看
WS_EX_TOPMOST这一位:一开始还比了 z 序上挨着的那个窗口,结果一直误报 ——
Windows 的输入法候选框(MSCTFIME UI)和任务栏缩略图预览(ThumbnailDeviceHelperWnd)
本身就是置顶的,永远压在所有人头上。
鱼搭子 v1.7.1
程序 1.7.1 / 插件 0.8.1 — 2026-11-03
设置页的「游戏搭话秒」不生效(挂件没把这个值传给插件)
- 🐞 现象:设置 → 游戏 → 「她主动看一眼:每 N 分钟」改了并保存,挂件自己的
config.json里确实变了,
但插件那边(~/.dsh/fish-buddy-config.json)一直是默认的 180,实际还是 3 分钟说一次。 - 根因:挂件
_报游戏模式()只发了{"游戏": true/false},没带间隔值;
插件只能读自己配置里那份 —— 两边的值各走各的。
(其它节奏值如随机搭话秒/冷却最短秒/安静秒本来就有「挂件随消息报上来」的通道,唯独这一项漏了。) - ✅ 挂件:
/hands/mode的请求体现在带搭话秒;游戏模式里改了这个值也会立刻重发一次,不用退出再进。 - ✅ 插件:
/hands/mode收下搭话秒,存进「挂件报的节奏」这条现有通道;用时优先取挂件报的,
拿不到才回落到自己也配置里的默认值。 - ✅ 那一格也从分钟改成秒(0 = 不说,最少 10 秒):以前是
int(分钟),填 0.5 会被截成 0,
想要「30 秒」根本填不出来。
鱼搭子 v1.7.0
程序 1.7.0 — 2026-11-03
游戏模式那几个键改成「录」,界面宽度按内容撑开,托盘能救人了
- ✨ 游戏模式的三个键不再手打(退出游戏模式 / 锁解锁弹幕框 / 清空待发截图):
以前是一个输入框,要自己写Alt+G这种字符串,写错了当场看不出来。
现在点「录一个键」→ 直接按你想要的键就算存好。
单击F9行;按住Ctrl/Alt/Shift再按一个键也行(Ctrl+Alt+G);
鼠标侧键/中键也能录(轮询本来就是按码取的,只是以前解析器不认鼠标码)。
左右键特意不放开 —— 设成热键会把正常点击吃掉。 - 🐞 进游戏模式默认不再锁弹幕框:以前默认锁着,进去连框都拖不动、而且它还是鼠标穿透的,
看着就是「点了没反应」。现在进去是能拖的状态,想固定自己勾「锁定」。 - 🐞 托盘「关闭当前功能」在游戏模式里不出现、也不起作用
(它只判断「当前页」,而进游戏模式时当前页是空的)。现在游戏模式里也会显示,点了就退出游戏模式
—— 热键被游戏挡住时,这是唯一的出口。 - 🐞 设置页不少行被挤到窗口外面:默认宽度 560 装不下几行「标签 + 输入框 + 按钮」,
字被挡在窗口外,得手动拉大才看得见。现在默认 640,而且切到哪页就按内容把窗口撑开
(不超过屏幕宽)。 - ✅ 顺带:写配置失败时不再静默 —— 录键那一步如果写不进去,会直接说「没存上 —— 配置写不进去:<路径>」。
- ✅ 标签短了:「跟上—张几乎一样的就不发(挂机省)」→「几乎一样的图不发」。
鱼搭子 插件 v0.8.2
插件 0.8.2
设置页「绑哪间会话」只列活着的会话,关掉窗口就选不到了
- 🐞 现象:会话窗口一关,设置里就选不到它;「未分组」那批更是从来没出现过。
- 根因:清单来自
sessions.list(),那是内存里活着的会话,不是磁盘上的全部。 - ✅ 改成扫
~/.dsh/sessions/(两级目录都认 = 含未分组),并且:- 归档的实时排除(先问
workspaceRegistry,读不到再读存储文件); - 子代理的会话(
origin/delegationDepth)不列; - 空会话(没说过话、日志不到 1 KB)不列;
- 标题优先用会话缓存,没有就回日志里捞第一句真话。
- 归档的实时排除(先问
- 📦 顺手按约定补上
engines(市场读这个字段,之前显示"未声明宿主要求")。
鱼搭子 v1.6.9
程序 1.6.9 — 2026-11-02
别人报的两个问题:蓝牙麦克风打不开 + 模型下不完整时报看不懂的错
- 🐞 麦克风打不开:
Invalid sample rate [PaErrorCode -9997]
以前开麦写死 16000 Hz。蓝牙耳机、部分 USB 麦只支持 44100 / 48000,按 16000 开就直接失败。
✅ 现在:先试 16000;开不起来就问这块设备的默认采样率,按它开,回调里重采样回 16k 再喂 VAD / 识别。
(check_input_settings查得过去、真开却失败的情况也兜住了 —— 开流那一步失败会再换默认率重开一次。) - 🐞 识别一直出错:
invalid unordered_map<K, T> key
这是模型文件不完整时 C++ 抛的错。「下到一半断了」的模型以前会被当成完整:
判断写的是「.onnx 大于 1MB 就算完」,一个 239MB 的模型下到 50MB 也过。
✅ 现在按每档的起码大小判(int8 ≥200MB / fp32 ≥800MB / paraformer ≥70MB),
下载完还会记一份真实大小(<档>/.sizes.json)留着核对;
真遇到不完整,报的是人话:「这一档的模型没下完整(model.onnx 只有 5MB,至少要 70MB)—— 在设置里点「重新装这一档」」。 - ✅ 本机验证:三档都能正常建识别器并解码;模拟 16000 失败(假蓝牙设备 48k)能自动换成 48k 并正确重采样(24000 点 → 8000 点,幅值不变);
故意造一个 5MB 的残档,报的是上面那句人话。
鱼搭子 v1.6.8
程序 1.6.8 — 2026-11-02
弹幕框可以缩放了
- 游戏设置里新增 「框大小」百分比(60 ~ 200,默认 100):框宽和框里的字一起按比例缩。
以前弹幕框是固定尺寸(宽 380、高按底图比例算),设置里没有能改它大小的项。 - 框高是按底图比例自动算的,所以给一个百分比,整块框(含底板和文字)等比缩放。
- 改完点别处 / 回车上就生效:它会按新尺寸重建一次框,位置还是你设的那一角。
鱼搭子 v1.6.7
程序 1.6.7 — 2026-11-02
下完引擎也用不了显卡:加载的是 exe 里那份 CPU 版 + 少下了一样 cuFFT
- 🐞 加载错了(这条最要命):
gpu/sherpa_onnx/__init__.py第一行是
from sherpa_onnx.lib._sherpa_onnx import ...—— 绝对导入。
以前我把外部包按另一个名字加载,这句绝对导入照样走正常路径,
结果拿到的是 exe 里打包的 CPU 版,C++ 就报Please compile with -DSHERPA_ONNX_ENABLE_GPU=ON。
表现:引擎下下来了、自检也说「下完了」,但一点「用显卡跑」就报这句 —— 下载的东西等于没用上。
✅ 现在把sherpa_onnx这整个名字都指到引擎目录(自定义 import 查找器 + 先清掉旧模块),
加载完还核一遍__file__确实在引擎目录里,不在就明确报错。 - 🐞 少下了一样 cuFFT:C++ 原话是
onnxruntime_providers_cuda.dll ... depends on "cufft64_11.dll" which is missing。
ORT 的 CUDA 后端硬依赖它,缺了就照样退回 CPU。现在下载清单里加上 cuFFT 11.4(189MB)。 - ✅ 自检的报错也更实在了:会把 C++ 那句原文摆出来(含缺哪个 DLL、或「CUDA 驱动版本不够」),
不再只说一句「用不了显卡」。 - 本机实测(AMD,没有 N 卡):加载确实指向引擎目录那份;补完 DLL 之后,报错从
「找不到 cufft64_11.dll」变成「CUDA driver version is insufficient」——
也就是依赖齐了,只剩「这台没有 N 卡」这一条。