READMESource: main@43fe099c
dsh-sticker-vault
群友发的图、表情包,先落到本地;同一张被反复发,计数到了就自动进库;每张图带着「谁发的、什么语境用的、能拿来接什么话」。
跟群友对喷、接梗、遇到同样的语境时,用 sticker_pick 按语境把图捞出来发。
全部本地:图片存在 ~/.dsh/sticker-vault/,不联网、不调模型。
它怎么跑
群友发图 ──► 落盘(按 sha256 去重)──► 计数
├─ 到 5 次 ──► 入库(带作者 + 语境)
└─ 没到 ──► 候选区里躺着
入库后 ──► 每张最多记 6 条语境 ──► sticker_pick 按语境/关键词/人搜索
└─► 命中就发 
- 重复就计数:同一张图(sha256 相同)被谁发都各算各的,A 发 3 次、B 发 2 次互不干扰。
- 每人只留高频的几张:默认每人最多 3 张,新图挤进来时挤掉这人计数最低、且没上锁的那张。
- 总容量 50 张:超了从全库挑计数最低、没上锁的挤掉。
- 计数会清:默认每 5 天清一次——候选归零,已入库的也重置成 2(从这个数重新攒,库里的老图因此比新候选多一点起跑优势,不会被刚冒出来的挤掉)。
- 上锁:锁住的图谁也挤不掉、也不能删,得先解锁。
装
插件页里填 dsh-sticker-vault,或者命令行:
# 从 GitHub 装
dsh plugin --profile web add github:yingchaoyi/dsh-sticker-vault
# 本地开发(软链)
dsh plugin --profile web add link:/path/to/dsh-sticker-vault
装完刷新页面,设置里会多一个 表情库。
面板
- 库:每张图 + 描述 + 标签 + 谁发的 + 用过几次;描述/标签直接改,回车保存;可以上锁、删除、展开看语境。
- 候选:还没到次数的图,能「现在就收」或「扔了」。
- 上传:自己加的图,填昵称、描述、标签。
- 搜索:按描述、标签、昵称、语境过滤。
- 面板每 4 秒自己刷新,采集是实时的。
参数都在面板顶上:达标次数、每人最多几张、总容量、计数周期(天)、清后库内从几次算。
工具
| 工具 | 干什么 |
|---|---|
sticker_pick |
按语境 / 关键词 / 群友找图,返回 Markdown 图片行 + 作者 + 语境 |
sticker_note |
改描述/标签、上锁、删除,或把本地图片手动加进库 |
sticker_stats |
看占用:库里几张、候选几张、上限多少、几天清一次 |
sticker_pick 的用法就是:找到合适的就把返回的  原样放进回复;没合适的它会说「别硬发」。
数据在哪
~/.dsh/sticker-vault/
├── store.json # 库 + 候选 + 参数
├── images/ # 入库的图
├── inbox/ # 候选的图(原始落盘)
└── sticker.log # 调试日志,256KB 自动截断
删掉整个目录 = 清空重来。store.json 也可以直接看、直接改。
自测
DSH_HOME=/tmp/sv node test/smoke.mjs # 采集/计数/淘汰/上锁/清计数/路由/工具,32 项
node test/client-smoke.mjs # 面板渲染,20 项
已知限制
- 只认完全相同的文件(sha256)。同一张图被压缩过、换了格式再发,会被当成新图。
- 只抓带附件的群消息:图片得是 DSH 附件(QQ 桥转进来的就是),纯链接图不抓。
- 淘汰是「谁的计数低挤谁」,不看关系;所以重要的图记得上锁。
License
MIT © 2026 yingchaoyi
No comments yet. Be the first to write one.