Skip to content

Releases: Yuuyuko-uu/dsh-fish-buddy

鱼搭子 v0.8.5

Choose a tag to compare

@Yuuyuko-uu Yuuyuko-uu released this 04 Nov 08:40

插件 0.8.5

陪看的画面:光给路径它不会自己去看

  • 🐞 陪看抽帧塞进白板的是「本地文件路径 + 尺寸大小」(白板只能是文字,图贴不进去)。
    可模型拿到路径不会主动去读,于是截了图、它其实一张都没看过 —— 白截。
  • 现在那一行后面多一句「用 read_image 打开看一眼」。别的都没动:图还是只在白板里给路径,
    不额外塞附件,不占上下文。

鱼搭子 v0.8.4

Choose a tag to compare

@Yuuyuko-uu Yuuyuko-uu released this 04 Nov 08:32

插件 0.8.4

陪看的画面:光给路径它不会自己去看

  • 🐞 陪看抽帧塞进白板的是「本地文件路径 + 尺寸大小」(白板只能是文字,图贴不进去)。
    可模型拿到路径不会主动去读,于是截了图、它其实一张都没看过 —— 白截。
  • 现在那一行后面多一句「用 read_image 打开看一眼」。别的都没动:图还是只在白板里给路径,
    不额外塞附件,不占上下文。

鱼搭子 0.8.3

Choose a tag to compare

@Yuuyuko-uu Yuuyuko-uu released this 04 Nov 06:28

修

游戏模式「攒着」那一档,永远不会自己搭话

  • 现象:打游戏时把截图设成「攒着,说话时一起看」,它不会主动开口;只有先发一句话,攒着的图才跟着那一轮一起被带过去。
  • 两个原因叠在一起:
    1. 心跳里「在游戏模式」那个分支是直接 return,而游戏模式的主动搭话只有另一条路才会调 —— 进了游戏模式就永远走不到;
    2. 就算走到了,开头判的是「配置.截图送法 !== 攒着」,可全项目根本没有这个字段(每张/攒着是挂件的设置,插件只收到每帧的存档/立即标志),永远为真。
  • 现在:在游戏模式 → 走游戏搭话那条路;那个不存在的字段判断删掉,改成「最近 90 秒内刚往会话里塞过图就让路」——「每张都说」那档自然被挡住,「攒着」那档能正常搭话。

鱼搭子 v1.7.2

Choose a tag to compare

@Yuuyuko-uu Yuuyuko-uu released this 03 Nov 05:04

程序 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

Choose a tag to compare

@Yuuyuko-uu Yuuyuko-uu released this 03 Nov 03:52

程序 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

Choose a tag to compare

@Yuuyuko-uu Yuuyuko-uu released this 03 Nov 03:31

程序 1.7.0 — 2026-11-03

游戏模式那几个键改成「录」,界面宽度按内容撑开,托盘能救人了

  • ✨ 游戏模式的三个键不再手打(退出游戏模式 / 锁解锁弹幕框 / 清空待发截图):
    以前是一个输入框,要自己写 Alt+G 这种字符串,写错了当场看不出来。
    现在点「录一个键」→ 直接按你想要的键就算存好。
    单击 F9 行;按住 Ctrl / Alt / Shift 再按一个键也行(Ctrl+Alt+G);
    鼠标侧键/中键也能录(轮询本来就是按码取的,只是以前解析器不认鼠标码)。
    左右键特意不放开 —— 设成热键会把正常点击吃掉。
  • 🐞 进游戏模式默认不再锁弹幕框:以前默认锁着,进去连框都拖不动、而且它还是鼠标穿透的,
    看着就是「点了没反应」。现在进去是能拖的状态,想固定自己勾「锁定」。
  • 🐞 托盘「关闭当前功能」在游戏模式里不出现、也不起作用
    (它只判断「当前页」,而进游戏模式时当前页是空的)。现在游戏模式里也会显示,点了就退出游戏模式
    —— 热键被游戏挡住时,这是唯一的出口。
  • 🐞 设置页不少行被挤到窗口外面:默认宽度 560 装不下几行「标签 + 输入框 + 按钮」,
    字被挡在窗口外,得手动拉大才看得见。现在默认 640,而且切到哪页就按内容把窗口撑开
    (不超过屏幕宽)。
  • ✅ 顺带:写配置失败时不再静默 —— 录键那一步如果写不进去,会直接说「没存上 —— 配置写不进去:<路径>」。
  • ✅ 标签短了:「跟上—张几乎一样的就不发(挂机省)」→「几乎一样的图不发」。

鱼搭子 插件 v0.8.2

Choose a tag to compare

@Yuuyuko-uu Yuuyuko-uu released this 03 Nov 10:58

插件 0.8.2

设置页「绑哪间会话」只列活着的会话,关掉窗口就选不到了

  • 🐞 现象:会话窗口一关,设置里就选不到它;「未分组」那批更是从来没出现过。
  • 根因:清单来自 sessions.list(),那是内存里活着的会话,不是磁盘上的全部。
  • ✅ 改成扫 ~/.dsh/sessions/(两级目录都认 = 含未分组),并且:
    • 归档的实时排除(先问 workspaceRegistry,读不到再读存储文件);
    • 子代理的会话(origin/delegationDepth)不列;
    • 空会话(没说过话、日志不到 1 KB)不列;
    • 标题优先用会话缓存,没有就回日志里捞第一句真话。
  • 📦 顺手按约定补上 engines(市场读这个字段,之前显示"未声明宿主要求")。

鱼搭子 v1.6.9

Choose a tag to compare

@Yuuyuko-uu Yuuyuko-uu released this 02 Nov 14:15

程序 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

Choose a tag to compare

@Yuuyuko-uu Yuuyuko-uu released this 02 Nov 11:33

程序 1.6.8 — 2026-11-02

弹幕框可以缩放了

  • 游戏设置里新增 「框大小」百分比(60 ~ 200,默认 100):框宽和框里的字一起按比例缩。
    以前弹幕框是固定尺寸(宽 380、高按底图比例算),设置里没有能改它大小的项。
  • 框高是按底图比例自动算的,所以给一个百分比,整块框(含底板和文字)等比缩放。
  • 改完点别处 / 回车上就生效:它会按新尺寸重建一次框,位置还是你设的那一角。

鱼搭子 v1.6.7

Choose a tag to compare

@Yuuyuko-uu Yuuyuko-uu released this 02 Nov 09:58

程序 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 卡」这一条。