DeepSeek Harness 的表情包插件 ——输入框一键发图,AI 按聊天气氛接梗;图库能自己养,也能从市场装。
66.5/100
综合分
487
GitHub 星标
34,025
npm 周下载
—/5
用户评分
数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-memenpm 源 · dsh-meme 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · market
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 1 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-meme @ 0.1.68
✓Node 引擎要求 >=22.13.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/29 15:33:50
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 114 处,展示前 53 条)
- 读取本地文件index.js:552
const pkg = JSON.parse(readFileSync(join(dirname(fileURLToPath(import.meta.url)), 'package.json'), 'utf8')) - 读取本地文件index.js:558
try { return JSON.parse(readFileSync(settingsFile, 'utf8')) } catch (e) { return {} } - 写入本地文件index.js:562
mkdirSync(join(dshHome(), '.dsh'), { recursive: true }) - 写入本地文件index.js:563
writeFileSync(settingsFile, JSON.stringify({ ...readSettings(), ...patch }, null, 2)) - 读取本地文件index.js:801
const bytes = readFileSync(file) - 读取本地文件index.js:956
if (!existsSync(abs)) throw new Error('文件不存在: ' + raw) - 读取本地文件index.js:1193
if (existsSync(join(bundledRoot, 'index.db'))) { - 写入本地文件index.js:1259
mkdirSync(dir, { recursive: true }) - 读取本地文件index.js:1261
if (!existsSync(indexPath)) { - 发起网络请求index.js:1363
const res = await fetch(imageUrl, { signal: AbortSignal.timeout(15000), redirect: 'follow' }) - 写入本地文件index.js:1398
mkdirSync(join(targetRoot, 'memes', tag), { recursive: true }) - 写入本地文件index.js:1399
writeFileSync(join(targetRoot, rel), buf) - 写入本地文件index.js:1671
mkdirSync(dirname(catalogCacheFile), { recursive: true }) - 发起网络请求index.js:1690
const res = await fetch(withCacheBust(u), { - 请求外部主机api.github.comindex.js:1734
const res = await fetch('https://api.github.com/repos/' + repo + '/releases?per_page=100', { - 发起网络请求index.js:1734
const res = await fetch('https://api.github.com/repos/' + repo + '/releases?per_page=100', { - 发起网络请求index.js:1799
res = await fetch(u, { signal: AbortSignal.timeout(15000), redirect: 'follow' }) - 发起网络请求index.js:1841
res = await fetch(u, { signal: AbortSignal.timeout(360000), redirect: 'follow' }) - 发起网络请求index.js:1894
const res = await fetch(u, { signal: AbortSignal.timeout(20000), redirect: 'follow' }) - 删除本地文件递归index.js:1997
rmSync(stageAbs, { recursive: true, force: true }) - 删除本地文件递归index.js:1998
rmSync(backupAbs, { recursive: true, force: true }) - 删除本地文件递归index.js:2036
rmSync(backupAbs, { recursive: true, force: true }) - 删除本地文件递归index.js:2041
rmSync(stageAbs, { recursive: true, force: true }) - 删除本地文件递归index.js:2137
rmSync(workDir, { recursive: true, force: true }) - 删除本地文件index.js:2163
try { unlinkSync(join(workDir, known.path)) } catch { } - 发起网络请求client.js:248
return (await fetch('/dsh-memes-api?' + qs.toString())).json() - 发起网络请求client.js:283
const res = await (await fetch('/dsh-memes-api', { - 发起网络请求client.js:638
const response = await fetch('/dsh-memes-export?packId=' + encodeURIComponent(id)) - 发起网络请求client.js:705
const res = await fetch('/dsh-memes-api?packId=' + encodeURIComponent(row.packId)).then((r) => r.json()) - 发起网络请求client.js:945
const response = await fetch('/dsh-memes-export?packId=' + encodeURIComponent(pack.id)) - 发起网络请求client.js:2453
fetch('/dsh-memes-api?packId=all') - 读取本地文件memes.js:109
return statSync(dir).isDirectory() && existsSync(join(dir, 'index.db')) - 读取本地文件memes.js:109
return statSync(dir).isDirectory() && existsSync(join(dir, 'index.db')) - 读取本地文件memes.js:121
const m = JSON.parse(readFileSync(join(dir, 'manifest.json'), 'utf8')) - 读取本地文件memes.js:150
try { mtimeMs = statSync(abs).mtimeMs } catch { return 0 } - 读取本地文件memes.js:156
try { bytes += statSync(join(abs, rel)).size } catch { } - 读取本地文件memes.js:180
if (!parent || !existsSync(parent)) return - 写入本地文件memes.js:751
mkdirSync(dir, { recursive: true }) - 写入本地文件memes.js:760
writeFileSync(manifestPath, JSON.stringify({ id: meta.id, name: meta.name, description: String(meta.description || ''), version: '1.0.0' }, null, 2)) - 写入本地文件memes.js:790
mkdirSync(dirname(to), { recursive: true }) - 写入本地文件memes.js:791
try { renameSync(from, to) } catch { - 写入本地文件memes.js:792
copyFileSync(from, to) - 删除本地文件memes.js:793
unlinkSync(from) - 读取本地文件qq-resize.js:53
for (const name of await readdir(profilesDir)) { - 读取本地文件qq-resize.js:105
try { srcStat = await stat(source) } catch { return inputPath } - 读取本地文件qq-resize.js:111
const hit = (await readdir(dir)).find((name) => name.startsWith(key + '.')) - 读取本地文件qq-resize.js:116
try { buf = await readFile(source) } catch { return inputPath } - 写入本地文件qq-resize.js:164
await mkdir(dir, { recursive: true }) - 写入本地文件qq-resize.js:167
await writeFile(tmp, out) - 写入本地文件qq-resize.js:168
await rename(tmp, dest) - 读取本地文件qq-resize.js:183
const names = await readdir(dir) - 读取本地文件qq-resize.js:188
const info = await stat(join(dir, name)) - 删除本地文件qq-resize.js:194
try { await unlink(join(dir, entry.name)) } catch { }
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
涉及外部主机:api.github.com
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-tools给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
3 张 · 点击查看大图功能亮点
- 纯文本斗图
- 情绪主动发图
- AI自动学图
DeepSeek Harness 的表情包插件——找得到、发得出、学得会,纯文本斗图、情绪主动发图、像 QQ/微信 一样发图、AI 自动学图、自定义表情包 、多种风格随意切换。
README
由 DeepSeek 最新模型翻译生成DeepSeek Harness 的表情包插件 ——输入框一键发图,AI 按聊天气氛接梗;图库能自己养,也能从市场装。
预览表情包 · 图库市场 · 反馈问题 · English · 中文
[!IMPORTANT]
dsh-meme 是 DeepSeek Harness 的插件,不是独立应用。
需要先装好 DSH,再通过插件市场或 CLI 装进某个 profile;社区开源项目,并非 DeepSeek 官方产品。
功能
- 😊 一键发图 — 输入框旁点 😊,搜索、按图库或情绪筛选,点一张直接发送;设置页可关掉「点图直接发送」,关闭后点一张只把 [表情: 描述] 插到输入框光标处,按回车和文字一起发出,手滑也不会误发。
- 🎭 主动斗图 — AI 会按聊天情绪自己找图接梗,不用等你开口;设置页可选「主动发图」四档:关闭 / 看气氛 / 活跃 / 每轮都发,也能改写提示词调整风格。
- 📱 IM / 手机斗图 — QQ、微信、飞书等经 dsh-im 接入后,表情包以原生图片消息发出,不用写文字标记;手机/平板经电脑局域网 IP 打开 DSH Web,设置页打开「局域网访问图库」即可收发(默认关)。QQ 大图容易被客户端当图片消息拉伸,可打开「QQ 发图尺寸」把发送副本缩到 200–450px,Web 仍用原图。
展开完整文档(README 剩余 1 节)
DeepSeek Harness 的表情包插件 ——输入框一键发图,AI 按聊天气氛接梗;图库能自己养,也能从市场装。
预览表情包 · 图库市场 · 反馈问题 · English · 中文
[!IMPORTANT]
dsh-meme 是 DeepSeek Harness 的插件,不是独立应用。
需要先装好 DSH,再通过插件市场或 CLI 装进某个 profile;社区开源项目,并非 DeepSeek 官方产品。
功能
- 😊 一键发图 — 输入框旁点 😊,搜索、按图库或情绪筛选,点一张直接发送;设置页可关掉「点图直接发送」,关闭后点一张只把 [表情: 描述] 插到输入框光标处,按回车和文字一起发出,手滑也不会误发。
- 🎭 主动斗图 — AI 会按聊天情绪自己找图接梗,不用等你开口;设置页可选「主动发图」四档:关闭 / 看气氛 / 活跃 / 每轮都发,也能改写提示词调整风格。
- 📱 IM / 手机斗图 — QQ、微信、飞书等经 dsh-im 接入后,表情包以原生图片消息发出,不用写文字标记;手机/平板经电脑局域网 IP 打开 DSH Web,设置页打开「局域网访问图库」即可收发(默认关)。QQ 大图容易被客户端当图片消息拉伸,可打开「QQ 发图尺寸」把发送副本缩到 200–450px,Web 仍用原图。
- 🧠 学会新图 — 上传图片后说「把这张图入库」,AI 自动识别分类和描述;也可以把图片文件直接拷进图库目录,点「扫描新增」一键入库(动图 GIF 建议走这条,原始动画保留;文件改名/删除后扫描会顺手清理失效记录)。
- 🗂️ 整理图库 — 跟 AI 说「列一下表情包清单」「帮我查查重复」「把这张改成 work 分类」——内置 meme_list / meme_update 维护工具,改分类/描述/关键词不用手动翻面板(删除留在面板,防误删)。
- 📦 管理与分享 — 多图库开关、上传与编辑、ZIP 导入导出、市场安装与更新。
- 🚀 开箱即用 — 内置大肥鱼图库(24 张),核心功能零第三方运行依赖,使用 Node 内置 SQLite;QQ 缩图是可选能力(dsh-im 已自带 sharp,未安装时按原图发送)。
宣传视频
▶ 在 B 站观看(56 秒)
安装
需要 Node.js ≥ 22.13.0。
| 方式 | 做法 |
| 插件市场(推荐) | DSH → 插件 → 添加插件,输入 dsh-meme 并安装 |
| 命令行 | dsh plugin --profile web add dsh-meme,把 web 换成目标 profile |
装好后打开任意会话,输入框旁会出现 😊。旧包名 dsh-expression 已弃用,内部插件 ID 保留兼容。
效果预览
斗图:你发一张,AI 接着回一张
选图:搜索、图库与情绪筛选
图库管理
打开 设置 → 表情包:
- 图库 — 卡片显示张数与占用大小,点卡片管理图片;分类下拉按真实分类筛选;「扫描新增」收编手动拷进目录的图片并清理失效记录。卡片开关决定 AI 能否使用该图库,可多选。支持新建、导入/导出 ZIP、投稿、删除和更新。
- 发现 — 预览市场图库并一键安装(Release ZIP 校验 SHA-256)。
- 设置 — 改扫描目录、主动发图(关闭/看气氛/活跃/每轮都发)、提示词、发送方式(自动/纯文字/图片)、QQ 发图尺寸(开关 + 200/300/400/450px 长边)、表情排布(并排/独占一行)、局域网访问、AGENTS.md。
设置页截图(展开查看)
图库:已安装图库与独立开关
发现:市场图库预览与一键安装
设置:发送方式、主动发图与图库目录
默认扫描 ~/.dsh/meme-packs,设置存 ~/.dsh/dsh-expression.json,升级保留。ZIP 支持常规压缩和纯图片目录。
发送方式只影响 AI:自动按渠道(Web 写标记、IM 发原图)、纯文字不发图、图片要求每次真发。主动发图四档:关闭(只在你明确要图时发)、看气氛(默认,AI 自己判断)、活跃(大部分合适的回合都发)、每轮都发(提示词强制要求发一张);仅在「自动」发送方式下生效,切换后新开会话生效,你明确要图时不受档位限制。QQ 发图尺寸默认关;打开后 QQ/IM 发送前把长边缩到所选尺寸(默认 300px),Web 聊天仍用原图,GIF 保留动画——QQ 官方机器人没有表情消息类型,缩小后更容易被客户端按表情渲染,平板端不会拉伸满屏。表情排布只影响前端:并排(默认)或图独占一行。
常见问题
- QQ 发表情被当大图拉伸 — QQ 官方机器人没有表情消息类型,大图会按图片消息渲染。设置页打开「QQ 发图尺寸」,选 300px(经验区间 200–450)后,QQ/IM 会发送缩小副本,Web 仍用原图;缩放需要 sharp,dsh-im 已自带,未安装时自动按原图发送。
- 更新失败 / 插件消失 — 先在市场点「重试」;仍失败就完全退出 DSH 后再更新。更早版本或仍失败,退出 DSH 后在 profile 目录执行 pnpm add dsh-meme@latest。图库和设置都在 ~/.dsh,重装不丢。详见 排障手册。
- 国内网络 / 市场拉不到 — 默认多镜像竞速 + 磁盘缓存,通常无需配置;拉不到时先在发现页点「重试」,再把「图库目录源」切到「镜像源」。详见 排障手册。
- 手机 / 局域网 / 反向代理 — 局域网 IP 访问在设置页打开「局域网访问图库」;反代域名需显式声明可信 Host(DSH_MEME_TRUSTED_HOSTS 或 allowedHosts)。详见 排障手册。
分享自己的图库
在「图库」新建图包库并加图 → 导出 ZIP 给朋友 导入。想进市场就点 投稿,按预填表单附上 ZIP、图片来源与许可。请用插件导出的 ZIP;GitHub 的「Download ZIP」是源码包,不能替代图库包。
工具与扩展
| 工具 | 用法 |
| send_meme | 按情绪 tag 随机抽图,或按 query 搜描述/关键词/文件名;跨所有启用图库,候选带 path(磁盘绝对路径)/ library,IM 场景另有 absPath;没命中时返回真实分类统计 |
| learn_meme | 收录最近一张用户图片,也可指定 attachmentId / imageUrl;附件 GIF 被压成单帧时会提示 |
| meme_list | 跨启用图库按关键词/分类/图库筛清单,带所属图库、分类、描述、关键词和 path |
| meme_update | 改一张图的分类/描述/关键词(只改索引不动文件);path 用 meme_list / send_meme 的原样 |
send_meme tag=happy
send_meme query="猫 比心" learn_meme meme_list tag=work meme_update path="C:\Users\<你>\.dsh\meme-packs\work\a.jpg" caption="加班到趴桌"
情绪桶:happy / angry / sad / shy / confused / daily。模型应把候选里的 [表情: 描述] 原样写进回复;没有合适的候选就换关键词或纯文字回复。
给智能体的说明:包内 AGENTS.md 写了发图判定、path 前缀和 GIF 压平的坑;图库整理流程在技能 .dsh/skills/dsh-meme-maintenance 里。设置页可直接查看/编辑。
动图读取:learn_meme 和上传识图会把 GIF 采样成多帧胶片条再送模型,caption 能描述动作;原图仍保留动画。WebP / APNG 只读元数据、按第一帧识别。
IM 投递
经 dsh-im 接入后,send_meme 候选带绝对路径,模型调用 dsh_im_return_file 发原生图片;Web 聊天仍用 [表情: 描述]。通过 dsh-companion 也可接 QQ。
QQ 官方机器人
对 dsh-qqbot 会话,候选带 absPath,交给 qqbot_send_file 的 file_path。dsh-qqbot 默认有路径白名单,需要把图库目录加进 sendFile.extraRoots:
qqbot profile 的 cordis.patch.yml(或「设置 → QQ 机器人」)
- id: im-qqbot
config:
sendFile:
extraRoots:
- C:\Users\<你>\.dsh\meme-packs
- C:\Users\<你>\.dsh\profiles\<profile>\node_modules\dsh-meme\memes
C:\Users\<你> 在 Linux/macOS 上换成 ~;图库放哪就加哪个目录,内置图库的路径也要加。
给其它插件的只读取图服务
同进程插件可用 ctx.get('dshMeme') 直接检索/挑图(只读):
| 方法 | 返回 |
| packs() | 已启用图库 { id, name, count, path }[] |
| search({ query, tag, limit }) | { ok, query, memes: [{ path, tag, caption, keywords, pack, packName }] } |
| pick({ query, tag }) | 命中 { ok: true, path, tag, caption, keywords, pack, packName };否则 { ok: false, reason, tags, tagStats } |
tag 是情绪桶;未命中时 tagStats 给出真实分类分布。返回的 path 是磁盘绝对路径且文件存在。自建图库目录或市场源见 远程图库规范。
插件 HTTP 接口默认只接受回环 Host;手机/局域网与反向代理的配置见 排障手册。
开发
纯 ESM,没有构建步骤。克隆仓库后直接跑测试:
git clone https://github.com/yyh-001/dsh-meme.git
cd dsh-meme
npm test
测试用 Node 内置 test runner(node --test test/*.test.mjs),发版前应全绿。本机用 link: 装进 profile 时,改完代码重启 DSH 即生效;给 agent 的硬约定见 AGENTS.md。
交流反馈
- 遇到问题先看 排障手册,没解决就 开 issue。
- 交流群:QQ 1 群(已满) · dsh 插件 2 群
- 版本更新见 npm。
相关项目
- DeepSeek Harness — 上游 agent 平台
- dsh-im — QQ / 微信 / 飞书等 IM 接入,表情包以原生图片发送
- dsh-meme-packs — 可下载图库与机器可读目录
- dsh-companion — 陪伴模式插件,也能接 QQ 通道
- agent-expression — 同一套图库思路的本地 Skill,适配 OpenClaw / Hermes / Cursor
许可
代码采用 MIT 许可。内置、市场与第三方图库的图片版权与使用范围见各图库说明。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
yyh-001/dsh-meme
DeepSeek Harness 的表情包插件 ——输入框一键发图,AI 按聊天气氛接梗;图库能自己养,也能从市场装。
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,025未汉化DSH
73.6
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 2,049已汉化MCP
72.8
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,358已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13938 个插件含 PR 收录与…
★ 350已汉化DSH
71.8
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7