Adds meme and emoji support to DeepSeek Harness for expressive text-based communication and customization.
ⓘ This plugin is a sub-package of the yyh-001/dsh-meme monorepo — stars and activity count the whole repository.
- Language
- JavaScript
- License
- MIT
- Branch
- main
Install
$ dsh plugin --profile web add github:yyh-001/dsh-meme#path:entryRun the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial
Install via your agent
Install the DeepSeek Harness plugin yyh-001/dsh-meme/entry for me: review the repository at https://github.com/yyh-001/dsh-meme first, then run the install command and verify the plugin loads successfully.
Paste this instruction to the DSH Web GUI assistant — it will install and verify for you.
一句话定位
DeepSeek Harness 表情包插件——让聊天助手像人一样主动斗图、会话输入框可一键发表情包,并在设置页里浏览、上传、分享整套图库。
核心能力
- 按情绪抽图:内置 happy/angry/sad/shy/confused/daily 六个情绪桶,模型调一次即可随机抽若干候选表情
- AI 自动学图:用户说「收藏这张」「收进图库」时,自动识别分类/描述/关键词并入库;也支持指定网络图片 URL
- 一键发图:会话输入框左侧笑脸按钮唤出悬浮面板,搜缩略图直接发,不走模型
- 主动斗图:默认在系统提示词里写入斗图规则,气氛合适时模型会主动把表情贴进回复
- 图库管理:设置页面板支持上传、编辑描述、改分类、删除单张、批量删除分类
- 分享与导入:一键把整套图库打包成 ZIP 发给朋友,对方导入后自动切换到新图库
技术实现
- 语言: JavaScript(Node.js ESM)
- 关键依赖: node:sqlite(内置模块,读写图库索引)、@deepseek-ai/dsh-tools(声明插件工具)、cordis patch(热挂载)
- 架构模式: Cordis 双半边——Host 半边(index.js)注册
send_meme/learn_meme工具与 HTTP 路由;Client 半边(client.js)渲染设置页面板与输入框悬浮窗。设置通过 patch 纯insert(id/name)注入,热挂载免重启 - 入口文件: index.js(插件主入口)、memes.js(MemesStore + 情绪桶)、client.js(设置页 React 面板)
适用场景
适合想让 AI 聊天助手「像人一样发图斗图」的普通用户——比如闲聊吐槽、卖萌、发表情回应对方情绪时,不必每次都让模型思考怎么回。同时适合需要批量管理、跨机器迁移自定义图库的内容运营者。表情包只在对话气泡里显示,不会触发 DSH 的图片合规检查。
前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DSH 宿主 | 未声明 | 仅声明 @deepseek-ai/dsh-tools peerDep,未指定 DSH 主版本 |
| Node.js | ≥20 | engines.node 声明 |
| 平台 | 跨平台 | 无 os/cpu 限制 |
| 原生模块 | node:sqlite | 仅依赖 Node 内置 SQLite;其他均为纯 JS |
安装方式
dsh plugin --profile web add github:yyh-001/dsh-meme/entry
配置项
本插件无需额外配置。默认启用内置「大肥鱼」图库(49 张)和「官方表情包1号」(92 张),聊天时即可用。用户在设置页可调整以下项(保存在 ~/.dsh/dsh-expression.json):
| 配置 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| 当前图库 | 下拉选择 | 在内置图库与扫描目录发现的图库之间切换 | 大肥鱼(dafeiyu-001) |
| 扫描目录 | 路径 | 放带 index.db 子文件夹的目录,插件自动发现新图库 | ~/.dsh/meme-packs |
| 导出/导入图库 | 按钮 | 把当前图库打包成 ZIP 或导入别人的 ZIP | — |
| 斗图提示词 | 文本 | 自定义「主动斗图」系统提示词;清空恢复默认 | 默认「气氛合适就主动用 send_meme 发图…发完简短不啰嗦」 |
| 表情气泡尺寸 | 数字(px) | 对话里表情图片最大宽高 | 160(写在 patch 配置的 memeSize 字段,非设置页) |
常见问题
Q: 安装后需要任何配置吗?
A: 不需要。安装完成即可使用,默认图库是「大肥鱼」(49 张鲸鱼娘)和「官方表情包1号」(92 张),覆盖 happy/angry/sad/shy/confused/daily 六个情绪。
Q: 怎么换一套表情包?
A: 打开 DSH 设置页「表情包」面板,在「当前图库」下拉里直接切换;也可以导入别人分享的 dsh-meme-pack-*.zip,或把自己的图库文件夹(带 index.db + manifest.json + memes/)放进扫描目录(默认 ~/.dsh/meme-packs)。
Q: 模型不会主动发图怎么办?
A: 直接告诉它「发个无语/开心/难过的表情包」,它会调用 send_meme 并传入情绪标签,从该情绪桶随机抽若干候选(每张带中文描述),挑贴题的一张发出来。不满意可让它再调一次,会换一批。
Q: 学图(learn_meme)需要什么前置条件?
A: 当前默认模型必须支持图片输入(多模态模型);不支持时可手动指定 tag/caption/keywords 跳过自动识别。单张图片 ≤8MB,支持 jpg/png/gif/webp。
Q: 怎么分享自己的图库给朋友?
A: 设置页点「导出图库」会下载一个 ZIP 文件(dsh-meme-pack-日期.zip),把它发给对方。对方在设置页「导入图库」上传这个 ZIP,就会自动切换到你的图库。注意:必须用插件导出的 ZIP,不能用 GitHub 仓库页的「Download ZIP」(那种会带出无关文件,导入失败)。
Q: 表情包会不会被图片合规检查拦截?
A: 不会。插件用文字 token([表情: 描述])发图,模型读写的是纯文字,前端只在对话气泡里按描述渲染为图片,所以不会触发 DSH 的图片输入审查。Think 区域、轨迹、工具卡仍然保持纯文字。
Q: 怎么彻底卸载?
A: 执行 dsh plugin --profile web remove dsh-meme 卸载插件,然后手动删除 ~/.dsh/dsh-expression.json(设置)和 ~/.dsh/meme-packs/(自建图库目录)即可清空所有用户数据。
上手难度
入门 — 安装即用,默认图库覆盖六种情绪,普通用户无需阅读文档就能让模型主动斗图;进阶用户可上传自定义图库或修改斗图提示词。
已知问题与限制
learn_meme的自动识图依赖当前默认模型支持图片输入;不支持时可手动指定 tag/caption/keywords 跳过识别- 学图与上传的图片单张 ≤8MB,仅接受 jpg/png/gif/webp 格式
- 网络图片 URL 必须以 http:// 或 https:// 开头,单次下载超时 15 秒
- 磁盘上图库按细分类(angry/baka/see…)存储,但模型只认 6 个情绪桶(happy/angry/sad/shy/confused/daily),跨桶时由前端做映射
- 表情配图时只渲染对话气泡;Think 区域、轨迹、工具卡保持纯文字 token,不会被替换成图
- ZIP 导入仅支持未压缩条目(store 模式);不能导入系统压缩过的 ZIP(如 macOS Finder 直接压缩的)
表情包插件 dsh-meme — 找得到、发得出、学得会
宣传页:yyh-001.github.io/dsh-meme(表情包合集可预览;仓库加 topic dsh-meme-pack + previews/ 即收录)
dsh-meme(原 dsh-expression)是 DeepSeek Harness 的表情包插件——找得到、发得出、学得会:
- 纯文本也能斗图:界面显示表情图片,模型收到的是
[表情: 描述],无需图片输入能力 - AI 自动学图:用户说「入库」时,
learn_meme收录最近一张用户附件(不必填附件 id),自动识别分类/描述 - 情绪主动发图:先选情绪桶,系统随机抽若干张 caption,模型挑一张贴进回复
- 像 QQ/微信 一样发图:输入框 😊 悬浮面板点选表情直接发出
- 零第三方依赖:仅 node:sqlite,装完即用
安装
已发布到 npm(dsh-meme),一行装进任意 DSH profile(如 ~/.dsh/profiles/web/):
dsh plugin --profile web add dsh-meme
# 等价于:
pnpm add dsh-meme
旧包名 dsh-expression 已弃用,请改用 dsh-meme。插件内部 id 仍为 dsh-expression,已有安装不受影响。
或从 GitHub / 本地直接装:
pnpm add github:yyh-001/dsh-meme # 或
pnpm add file:/path/to/dsh-meme
注意:pnpm 有「新包安全期」(默认 24h),刚发布的版本会被静默回落到旧版;急用可在
pnpm-workspace.yaml的minimumReleaseAgeExclude里加上dsh-meme。
配置
默认内置两套图库:official-001(官方表情包 1 号,92 张)和 dafeiyu-001(大肥鱼,49 张),开箱用官方包,无需任何配置。
设置页「当前图库」下拉即可切换。插件会扫描内置 memes/* 以及「扫描目录」(默认 ~/.dsh/meme-packs)下带 index.db 的子文件夹。导入 ZIP 也会放进扫描目录并立刻切过去。设置存在 ~/.dsh/dsh-expression.json,升级插件不丢。
装完即用
用户: 发个无语的表情包
模型: send_meme tag=sad → 随机几张 caption → 把 [表情: …] 贴进回复
前端: 按描述配图,对话里看起来就是表情
输入框左侧点 😊(微信同款笑脸)直接选图一键发出,无需让模型代劳。
工具
| 工具 | 作用 |
|---|---|
send_meme | 按情绪随机抽候选;Web 模式把 [表情: 描述] 写进回复,前端配图 |
learn_meme | 学图:用户说「入库」即可(默认最近一张用户附件);也可传 attachmentId / imageUrl |
发图格式(默认)
界面显示表情图片,模型只读写文字 token——不触发 dsh 的图片准入检查:
- 模型和悬浮窗都发
[表情: 描述](不要带网址) - 前端只在对话气泡里按 caption 配图(Think / 轨迹 / 工具卡保持纯文字)
- 引号差异(
“”/"")会折叠后再匹配 - 直接上传的图片仍是附件,原样进会话;学图走
learn_meme
界面
设置页「表情包」面板(已美化):
- 当前图库:下拉切换已扫描到的表情包组(内置 + 扫描目录)
- 扫描目录:改路径后自动发现子文件夹里的图库;导入 ZIP 也放这里
- 导出/导入图库:打包成 ZIP 分享给别人,导入别人的包一键切换
- 上传弹窗:选图预览 + 分类下拉(选择/新建/删除分类)+ 描述 + 关键词
- 编辑弹窗:同款分类下拉,改分类/描述/关键词
- 分类中文显示:下拉与卡片显示「生气 (angry)」式中文
- 分类筛选即时生效
输入框 😊 一键发表情包:点开面板 → 搜索 / 浏览缩略图 → 点一张直接发出。
分享自己的表情包
两条路:发给朋友,或挂到宣传页让别人预览。
发给朋友
- 设置页 → 导出图库,得到
dsh-meme-pack-日期.zip - 把这个 ZIP 发出去
- 对方设置页 → 导入图库,选这个 ZIP,会自动切换到新图库
请用插件导出的 ZIP。GitHub 仓库页上的「Download ZIP / 下载源码」是压缩过的,导入会失败。
挂到宣传页
- 先按上面导出 ZIP,解压成一个文件夹(里面应有
index.db、manifest.json、memes/) - 新建 GitHub 仓库,把文件夹内容放进仓库根目录
- 加
previews/,放 6–12 张缩略图(jpg/png),宣传页靠它们做预览 - 仓库 Settings → Topics 加上
dsh-meme-pack
可选:把插件导出的那个 ZIP 挂到 GitHub Release,别人就能直接下载再导入。也可以 git clone 之后,把仓库放进扫描目录(或设置页「打开其他目录」指过去)。
它做什么
| 能力 | 说明 |
|---|---|
| 按情绪抽图 | 六个情绪桶:happy / angry / sad / shy / confused / daily;随机抽 N 张 caption 给模型挑 |
| 自动学图 | learn_meme 默认收录最近一张用户附件,也可传 URL;识图需当前模型支持图片输入 |
| 文字 token 发图 | [表情: 描述] → 前端配图;只渲染对话气泡 |
| 输入框一键发图 | 会话输入框左侧 😊 按钮 → 悬浮面板选图 → 一点即发 |
| 情绪主动发图 | 气氛对了就主动甩图;发完短接,让图自己说话 |
| 管理 API | 上传 / 编辑 / 删除 / 删除分类,全部在设置页完成,数据持久 |
| 图库切换 | 设置页下拉切换已扫描图库;扫描目录默认 ~/.dsh/meme-packs |
| 导出 / 导入 | 图库一键打包 ZIP 分享,导入别人的包自动切换(零依赖实现) |
日常命令(模型视角)
send_meme tag=sad limit=8 # 难过桶随机 8 张,挑一行 [表情: …] 贴进回复
send_meme tag=happy # 开心/卖萌
learn_meme # 收录最近一张用户图(不必填 id)
learn_meme imageUrl="https://…" # 收录任意图片 URL
情绪字典:happy 开心(卖萌/可爱/喜欢)/ angry 生气 / sad 难过(无语/求饶)/ shy 害羞 / confused 困惑惊讶 / daily 日常(睡觉/上班/早上好)。不满意再 search 同一 tag 换一批。
给模型的三条铁律
完整约定见 send_meme 工具描述。
- 把候选里的
[表情: 描述]整段原样写进回复,不要加网址、不要改成 markdown 图片 - 没命中就换情绪或回文字,别硬发
- 发完保持简短,让图自己说话——不复述、不描述图的内容
图库来源
内置两套:
-
大肥鱼(
id: dafeiyu-001,49 张鲸鱼娘 chibi),设置页可切过来:包含angry3 张、confused4 张、daily7 张、happy12 张、sad6 张、shy4 张,以及baka/color/cpu/fool/givemoney/like/meow/morning/see/sigh/sleep/surprised/work各 1 张。 -
官方表情包1号(
id: official-001,默认)来自 Astrbot mememanager 官方初始表情包: -
上游仓库:anka-afk/astrbot-meme-pack-official-01(
main分支),维护者 anka-afk -
构成:
index.db(SQLite 索引,含每张 caption/关键词)+manifest.json(分类说明 + 来源标注)+memes/<tag>/图片 +previews/ -
⚠️ 上游未提供 LICENSE:这套图缺乏显式的再分发许可。随插件打包作为个人默认库使用没问题;如需公开对外分发,请保留 manifest.json 中的上游来源标注。
接到你的 Agent
| 组件 | 说明 |
|---|---|
| dsh-meme | 本插件:MemesStore(情绪抽图)+ send_meme(发送)+ learn_meme(学图)+ 管理 API |
| dsh-companion | 人设 + Hermes 记忆 + 消息通道;提供发图服务 |
| 图库 | 内置 official-001 + dafeiyu-001,设置页扫描切换 / 导入分享包 |
dsh-meme/
index.js 插件入口:memeRoot 配置 + 管理 API + learn_meme/识图
memes.js MemesStore:SQLite 索引 + 情绪桶随机抽图 + 路径安全
client.js 前端:设置页面板(上传/编辑/删除) + 😊 悬浮窗 + [表情: 描述] 配图
cordis.patch.yml bundle patch(纯 insert,热挂载免重启)
memes/
official-001/ 内置默认图库(92 张)
dafeiyu-001/ 内置大肥鱼(49 张鲸鱼娘)
package.json name / inject / peer deps
README.md
LICENSE
已知限制
learn_meme自动识图依赖当前默认模型支持图片输入(不支持时可手动指定 tag/caption);- 磁盘上仍是细 tag(angry/baka/…),模型只认六个情绪桶;caption 对不齐时前端会折叠引号后再配图。
License
Read the usage guide →
Install steps, key points, FAQ and compatibility for this plugin — auto-derived from indexed fields.
Listing badge
[](https://deepseek-plugin.org/plugins/yyh-001/dsh-meme/entry)Paste this markdown into your GitHub README to link back to this listing. The badge only states the listing — not a security endorsement.