dsh-memes-reply
蓝色大肥鱼表情包回复插件:模型按语境在回复里贴一张会动的大肥鱼,配置面板画在插件管理页里本插件自己的页面上(预览墙 + 下一轮指定)。素材经插件自有 HTTP 路由直出,不经过附件流水线(那会把动画压成静图)。
What it is
蓝色大肥鱼表情包回复插件:模型按语境在回复里贴一张会动的大肥鱼,配置面板画在插件管理页里本插件自己的页面上(预览墙 + 下一轮指定)。素材经插件自有 HTTP 路由直出,不经过附件流水线(那会把动画压成静图)。
How to install
Run this in the DSH web profile, then refresh the page.
$ dsh plugin --profile web add 'git+https://github.com/liceses/dsh-memes-reply.git#e6e551e1867e4e6554af8e529c272631bd925d4a'
DSH versions accepted
>=0.1.7-rc.1 <0.3
Author and traction
liceses · ★ 13 · Updated 2026-10-07
About this plugin
dsh-memes-reply · 蓝色大肥鱼表情包回复
> English: A DSH plugin that drops one animated blue-fish sticker under each reply — picked by context, by the model, or by you for the next turn.
让 DSH 在每一条回复正文下方(靠左、与正文左对齐)贴一张会动的蓝色大肥鱼表情包。
它替你省掉的是"自己找图 → 复制 → 粘贴"这条手工链:一轮一张,贴在回复下面,刷新还在、向上滚回历史还在、每个会话各是各的。
贴哪张由语境决定(默认:回复里命中情绪词就补一张),也可以由你为下一轮点名一张。
素材(157 张 / 86 MB)走插件自己的 HTTP 路由直出,不经过 DSH 附件流水线 —— 那条流水线会把动画压成静图。
效果实拍:一轮真实对话 —— 贴纸贴在回复正文下方、靠左与正文对齐(右下角那个是「常驻挂件」,另一条路径)。这一轮是 keyword 模式命中情绪词后自动补的,不是手动点出来的。
---
它长什么样、怎么动
一轮回复在页面上的版面(ASCII 结构图,不是截图):
你 帮我把这个脚本改成 TypeScript
模型 改好了,三条都过了类型检查。
[ 大肥鱼 ] ← 贴纸:贴纸层画的,不是回复正文
靠左、与正文左对齐 · 默认 96px
[ 大肥鱼 ] ← 常驻挂件:右下角浮层,可拖、可收
动效是真的动画,不是一张静图:贴纸层永远加载全尺寸动画 WebP,不走首帧缩略图。
这张是动图(67 帧动画 WebP,506×396)—— 直接截自一轮真实回复:上面能看到 use_sticker 的工具调用行,下面是贴纸在回复正文下方动起来的样子。
下面三条是从本机运行中的实例 GET /api/dsh-memes-reply/catalog 拿到的真实元数据(原始 JSON 见「[诊断](#diagnostics)」):
| 贴纸 id | 名字 | 尺寸 | 帧数 | 帧率 | 时长 | 单张体积 |
| --- | --- | --- | --- | --- | --- | --- |
| tiaowu-pizhichun | 跳舞(低皮质醇) | 240×240 | 66 | 50fps | 1320 ms | 629,686 B |
| notice-bits | 通知_提示 Bits | 240×240 | 86 | 50fps | 1720 ms | 715,886 B |
| qidai-1 | 期待 | 200×200 | 131 | 50fps | 2620 ms | 794,786 B |
它长在哪(四个座位)
| 面 | 座位 | 说明 |
| --- | --- | --- |
| 贴纸层 · 生成中 | keyed conversation.chat.node + 自定义 ConversationNodeDefinition | 只负责生成中的占位(思考 / 打字中)。那时官方过程块强制展开,所以放在流里是安全的 |
| 贴纸层 · 落定 | list conversation.chat.turnTail(官方"回合收尾"槽位) | 最终贴纸挂这里。官方的 turn-tail 节点 kind 在过程折叠豁免名单内,不会被「工作步骤展示」折进工具细节块(理由见下节) |
| 常驻挂件 | shell.overlay(加法型,frame-wide) | "随时能看到"是硬需求,与"这条回复的贴纸"是两个职责 |
| 配置面板 | plugins.bundle.config(key = 组合包名 dsh-memes-reply) | 插件管理页里本插件自己的页面;旧的 settings.plugin.item 已被统一插件管理移除 |
什么时候出现
| 时机 | 屏幕上看到什么 | 谁决定 |
| --- | --- | --- |
| 生成中(phase=streaming) | 「思考 / 打字」那一组里的占位表情 | 按 (会话, 轮次) 哈希确定性挑一张 —— 同一回合反复渲染永远是同一张 |
| 回复写完(turn/end 后 phase=settled) | 同一个节点换成这一轮的最终贴纸 | 派生优先级(见「[工作原理](#mechanism)」);autoMode=jev 时结论是异步取回的,没到之前不显示任何贴纸 |
| 没选中 / 本会话静音 / 总开关关掉 | 什么都不贴 | 规则与开关 |
下一轮指定一张(三种入口)
| 入口 | 作用域 | 怎么用 |
| --- | --- | --- |
| 配置面板的预览墙 | 全局、一次性 | 点一格缩略图 → POST /latch(面板底部「取消指定」清掉) |
| /fish | 本会话、一次性 | 命令;优先于面板的全局指定 |
| 模型工具 use_sticker | 本回合 | 模型自己点名,不需要你操作 |
「一次性」是字面意思:指定被最新的那个已落定回合用掉即清(src/client/node.tsx 的 latchConsumedFor),历史回合不会把它反复吃掉。
---
快速开始
三种装法。共同前提:装完要重启(bundle 层与客户端脚本清单都在启动时读取)。
一、装
方式一:从 GitHub 装(推荐)
dsh plugin --profile web add github:liceses/dsh-memes-reply
实测 1.26 MB / 4 秒:不编译、不装构建依赖、不需要任何构建白名单。
> DSH Desktop 用户注意:desktop profile 由 Electron 独占管理,命令行会被直接拒绝
> (profile "desktop" is managed exclusively by the Electron application)。
> 请在设置 → 插件界面填入仓库地址。
> 为什么能免编译:lib/ 已随仓库提交,而 pnpm 的 packageShouldBeBuilt() 只有两种情况会构建 ——
Compare in this category
The five most-starred plugins in the same category.
| Plugin | Author | Stars | Version | Updated |
|---|---|---|---|---|
| dsh-purge | kingcharleslzy-ai | 6.3K | 1.6.86 | 2026-11-08 |
| dsh-unrestricted | yexi-by | 1.1K | 0.2.8 | 2026-11-05 |
| dsh-univer-office | dream-num | 707 | 0.4.0 | 2026-11-03 |
| dsh-synapse | liangmianya | 697 | 0.5.7 | 2026-11-04 |
| dsh-qqbot | tencent-connect | 570 | 0.5.5 | 2026-11-08 |