🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

鲸鱼娘表情库 jimmyalxe/nekowhale-meme

DeepSeek 客户端
jimmyalxe3 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

收集表情图并打标签分组,让 AI 检索斗图发图

29.8/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/11/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/jimmyalxe/nekowhale-meme.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 3 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 96 处,展示前 43 条)
  • 发起网络请求
    index.js:94
    const res = await fetch(url, { signal: AbortSignal.timeout(timeoutMs) })
  • 写入本地文件
    index.js:196
    await writeFile(ps1, '\ufeff' + script, 'utf8')
  • 执行外部命令固定命令
    index.js:199
    execFile('powershell.exe', ['-NoProfile', '-NonInteractive', '-ExecutionPolicy', 'Bypass', '-File', ps1],
  • 执行外部命令来自配置/变量
    index.js:219
    execFile(cmd, args, { timeout: 5 * 60_000 }, (err, stdout) => (err ? rej(err) : res2(String(stdout).trim())))
  • 读取本地文件
    index.js:231
    try { return readFileSync(p, 'utf8').replace(/^[ FEFF 200B]+/u, '').trim() } catch { return null }
  • 删除本地文件
    index.js:234
    try { rmSync(p, { force: true }) } catch { }
  • 读取本地文件
    index.js:243
    if (!existsSync(inboxDir)) return 0
  • 读取本地文件
    index.js:246
    for (const name of await readdir(inboxDir)) {
  • 删除本地文件
    index.js:249
    try { await rm(join(inboxDir, name), { force: true }); n += 1 } catch { }
  • 读取本地文件
    index.js:270
    if (!existsSync(fromDir)) return out
  • 写入本地文件
    index.js:271
    await mkdir(toDir, { recursive: true })
  • 读取本地文件
    index.js:277
    if (!existsSync(src)) continue
  • 读取本地文件
    index.js:280
    const info = await stat(src)
  • 写入本地文件
    index.js:284
    await rename(src, dst)
  • 写入本地文件
    index.js:289
    await mkdir(dst, { recursive: true })
  • 删除本地文件递归
    index.js:297
    if (left.length === 0) await rm(src, { recursive: true, force: true })
  • 写入本地文件
    index.js:318
    await mkdir(d, { recursive: true })
  • 删除本地文件递归
    index.js:321
    try { const left = await readdir(s); if (left.length === 0) await rm(s, { recursive: true, force: true }) } catch { }
  • 写入本地文件
    index.js:326
    await rename(s, d)
  • 删除本地文件
    index.js:332
    await rm(s, { force: true })
  • 发起网络请求
    index.js:917
    const res = await fetch(u, { signal: AbortSignal.timeout(20000) })
  • 删除本地文件
    index.js:1257
    await rm(tmp, { force: true }).catch(() => {})
  • 发起网络请求
    client.js:167
    const r = await fetch(`${API}${path}${q}`, { cache: 'no-store' })
  • 发起网络请求
    client.js:172
    const r = await fetch(`${API}${path}`, {
  • 读取本地文件
    lib/store.js:149
    if (!existsSync(dir)) mkdirSync(dir, { recursive: true })
  • 写入本地文件
    lib/store.js:149
    if (!existsSync(dir)) mkdirSync(dir, { recursive: true })
  • 写入本地文件
    lib/store.js:152
    writeFileSync(tmp, text, 'utf8')
  • 读取本地文件
    lib/store.js:153
    if (backup && existsSync(file)) {
  • 写入本地文件
    lib/store.js:154
    try { copyFileSync(file, `${file}.bak`) } catch { }
  • 写入本地文件
    lib/store.js:156
    renameSync(tmp, file)
  • 读取本地文件
    lib/store.js:161
    const raw = readFileSync(file, 'utf8')
  • 读取本地文件
    lib/store.js:186
    if (!existsSync(d)) mkdirSync(d, { recursive: true })
  • 写入本地文件
    lib/store.js:186
    if (!existsSync(d)) mkdirSync(d, { recursive: true })
  • 读取本地文件
    lib/store.js:196
    if (!existsSync(this.indexFile)) writeJsonAtomic(this.indexFile, this.index)
  • 读取本地文件
    lib/store.js:300
    if (!existsSync(sourceAbs)) return { skipped: '文件不存在' }
  • 写入本地文件
    lib/store.js:323
    await copyFile(sourceAbs, target)
  • 删除本地文件
    lib/store.js:429
    await rm(from, { force: true })
  • 删除本地文件
    lib/store.js:450
    if (existsSync(p)) rmSync(p, { force: true })
  • 删除本地文件
    lib/store.js:452
    if (existsSync(sidecar)) rmSync(sidecar, { force: true })
  • 删除本地文件
    lib/store.js:522
    await rm(from, { force: true })
  • 删除本地文件递归
    lib/store.js:576
    if (purgeFiles && existsSync(dir)) await rm(dir, { recursive: true, force: true })
  • 删除本地文件递归
    lib/store.js:596
    if (purgeFiles && existsSync(dir)) await rm(dir, { recursive: true, force: true })
  • 读取本地文件
    lib/tagger.js:288
    bytes = await readFile(abs)
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

基于dsh-nekowhale-stickers 鲸鱼娘二创的斗图插件,把散落的表情图收进一个可检索、可分组、可被 AI 调用**的本地库。

README

由 DeepSeek 最新模型翻译生成
nekowhale-meme 大肥鱼表情库 —— DSH 表情库插件 把散落的表情图收进一个可检索、可分组、可被 AI 调用的本地库。 初始表情包直接连公开站点 kiriyuki.com (清单 /api/manifest、图 /media/gif、作者标注 /meme/kit/nekowhale.json)。 本插件基于 dsh-nekowhale-stickers 二创,增加导入表情包功能。 功能 - 收集:页面上传 / 文件夹导入 / meme_import 工具,都只进队列,不自动识别 - 识别打标签:串行、可中止,25 个中文情绪单选 + 自由标签;识别模型在队列页选,选定后固定不跟随全局默认 - 分组管理:多分组、只读组(角色包)、移图、重命名、删除 - AI 检索发图:meme_search / meme_send 工具,只搜「AI 可用组」里已入库且启用的图 - 应景斗图:每轮往上下文塞一条提示,由模型自己判断要不要贴图(提示本身占少量上下文 token,关掉开关就完全不注入) - 一键下载初始表情包:从 kiriyuki.com 直连,可自选包,自动套用作者的人工标注 页面 默认进入队列页(全宽),右上角 ⚙ 整页跳转到设置页,设置页左上角 ← 返回。
展开完整文档(README 剩余 1 节)
nekowhale-meme

大肥鱼表情库 —— DSH 表情库插件

把散落的表情图收进一个可检索、可分组、可被 AI 调用的本地库。

初始表情包直接连公开站点 kiriyuki.com (清单 /api/manifest、图 /media/gif、作者标注 /meme/kit/nekowhale.json)。
本插件基于 dsh-nekowhale-stickers 二创,增加导入表情包功能。

功能

- 收集:页面上传 / 文件夹导入 / meme_import 工具,都只进队列,不自动识别
- 识别打标签:串行、可中止,25 个中文情绪单选 + 自由标签;识别模型在队列页选,选定后固定不跟随全局默认
- 分组管理:多分组、只读组(角色包)、移图、重命名、删除
- AI 检索发图:meme_search / meme_send 工具,只搜「AI 可用组」里已入库且启用的图
- 应景斗图:每轮往上下文塞一条提示,由模型自己判断要不要贴图(提示本身占少量上下文 token,关掉开关就完全不注入)
- 一键下载初始表情包:从 kiriyuki.com 直连,可自选包,自动套用作者的人工标注

页面

默认进入队列页(全宽),右上角 ⚙ 整页跳转到设置页,设置页左上角 ← 返回。

队列页(三 Tab 三等分)

| Tab | 能做什么 |
| 待识别 | 全选 / 识别勾选 / 删除勾选;识别模型下拉(红字「识别需要消耗 token」);识别进度条 + 中止;失败项红字显示原因 |
| 已标识·待确认 | 按情绪二级筛选(「全部」+ 25 情绪按钮,带张数,该情绪没图的置灰不可点);确认入库(可选目标组)/ 重新识别 / 删除勾选;每项「情绪|描述|关键词」+ 编辑面板 |
| 已入库·可用 | 分组选择器 + 管理分组(新建/重命名/删除都在这里);按情绪二级筛选(同上);移出到待确认 / 改分组 / 删除勾选 |

三个状态的图都能编辑(显示名 / 情绪 / 标签 / 适用场景 / 描述):待识别可先填标注,待确认正好用来核对模型输出,库内日常修正。唯一例外是只读组(从站点下载的角色包),组里的图不可编辑;但整个包可以移除——管理分组 里该组一侧是「移除包」,会连组里的图和磁盘文件一起删,之后重新导入会重新下载。

点击任意缩略图可放大预览:页面居中显示,不超过原图尺寸;右上角 ✕ 或点图外空白关闭。

设置页

- 基础
- 数据目录(可改,不写死 C 盘)
- 路径只能通过「选择…」挑选,输入框只读(不允许手打,避免绕过校验与迁移逻辑)
- 「选择…」优先调系统原生目录选择框(Electron dialog / Windows FolderBrowserDialog / Linux zenity),远程访问时自动回退到内置目录浏览器
- 换目录时把图库与索引整体搬迁到新目录(剪切,旧目录随即清空),不占双份磁盘
- 新目录已有同名文件时跳过不覆盖;有文件搬失败则中止切换并保留原目录,不会出现半截数据
- 换到新目录会记住:旧目录留指针,重启后沿链跟随
- 下载初始表情包:从 kiriyuki.com 直连,带进度条与包维度进度
- 包选择器:下拉多选,带搜索 / 全选 / 清空 / 每包张数与体积 / 「已下 N 张」标记
- 已选合计超过 500MB 显示红色提示
- 每个包建成一个独立只读组(组名=包名),组里的图只能看不能改
- 双人包不支持(本项目不处理双人方向),会从选择器剔除且接口拒绝下载
- 斗图:一个「斗图」总开关(默认关,开着才会往上下文里放提示)、频率步进器(每 10 轮最多 1–10 张)、触发方式(情绪词匹配 / 模型判断)——插件自己不额外发起模型请求:前者用纯关键词匹配算出情绪再告诉模型,后者只说明「该发哪个由你判断」。这条提示会作为一条消息进入上下文,本身要占会话 token
- AI 可用组:下拉多选(带张数、搜索、全选、清空)。没勾的组 AI 完全看不到;新建组默认不勾

保存规则

保存按钮是唯一的写入途径。 队列页与设置页顶部栏结构完全一致:

nekowhale-meme ● 未保存 [放弃] [保存] [⚙] ← 队列页设置 ● 未保存 [放弃] [保存] [←] ← 设置页

- 改任何设置后出现「● 未保存」,放弃/保存 才可点
- 不点保存就离开(返回队列页、关掉插件页)一律视为放弃,磁盘不会有任何写入
- 从系统选择框选目录只填进输入框,同样要点保存才生效
- 悬停/切换皮肤时配色自动适配(所有表面色用系统底色混出不透明实色,不叠在皮肤背景上)

安装

dsh plugin --profile desktop add github:jimmyalxe/nekowhale-meme

装完刷新插件页即可(工具/接口在插件装载后即生效)。

也可以从 npm 装(同一个包,版本号与 package.json 一致):

dsh plugin --profile desktop add nekowhale-meme

换版本必须先 remove 再 add,不能覆盖安装:

dsh plugin --profile desktop remove nekowhale-meme
dsh plugin --profile desktop add github:jimmyalxe/nekowhale-meme

本地开发

开发目录用 link: 装,改完代码热重载即可,不用碰 GitHub:

dsh plugin --profile desktop add "link:<开发目录绝对路径>"

两个前提:
1. 开发目录里要能解析 peer 依赖 @deepseek-ai/schemastery,否则宿主加载失败会静默留在旧版本。
本机做法是把 profile 的依赖链进来: New-Item -ItemType Junction -Path node_modules\@deepseek-ai -Target <profile>\node_modules\@deepseek-ai
2. 命令行的 add/remove 只改依赖,不触发宿主重载。要让新代码真正生效,走插件管理器接口: POST /api/plugin-manager/remove {"id":"nekowhale-meme"} → POST /api/plugin-manager/install {"spec":"link:..."} → 轮询 GET /api/plugin-manager/status?job=<jobId> 到 phase=done。

数据目录

默认 $DSH_HOME/nekowhale-meme(与其他 DSH 插件的约定一致,不会写死某个盘符)。
设置页里可以改成任意位置(包括别的盘)。

换目录时会把图库与索引整体搬迁到新目录(剪切,旧目录随即清空),不占双份磁盘;新目录已有同名文件时跳过不覆盖;有文件搬失败则中止切换并保留原目录,不会出现半截数据。

<dataDir>
├── config.json 配置(数据目录、识别模型、斗图、AI 可用组) ├── index.json 索引:分组 + 条目(写前留 index.json.bak) ├── health.json 失效清单(只增不减,点「知道了」整体清空) ├── inbox/ 上传/下载中转(不参与索引) ├── pending/ 待识别队列 │ └── 20261029T014312-a3f9c1.jpg └── library/ ├── 大肥鱼/ 从 kiriyuki 下载的只读组(保留原名) └── 我的收藏/ 默认自定义组

命名与去重

| 阶段 | 文件名 |
| 进队列 | <YYYYMMDDTHHMMSS>-<6位哈希>.<ext> |
| 入库后 | <组id>-<时间戳>-<6位哈希>.<ext> |
| 从站点下载 | 保留原名(只读组,不参与重命名规则) |

磁盘文件名永不重命名;用户改名只改索引里的 displayName (界面主标题=显示名,副标题=原文件名 + 日期)。
进队列时算 SHA-1,库里已有就跳过并提示「这张已经在库里(组 X 下)」。

情绪与标签

沿用 25 个中文情绪(与作者标注表完全一致,含顺序),单选:

开心 大笑 喜欢 害羞 得意 兴奋 惊讶 疑惑 思考 无语 难过 哭生气 害怕 疲惫 赞同 拒绝 打招呼 感谢 道歉 卖萌 搞怪 嘲讽 安慰 其他

标签从两个渠道来:

1. 作者的标注表(下载时自动套用)站点公开的 /meme/kit/nekowhale.json 有 322 条人工标注。站点是模板化的(同一 stem 在不同包里是同一动作换角色重渲染),所以按 stem 匹配后可选包命中率约 97%。desc 含角色名,只有「大肥鱼」包保留。
2. AI 识别(要花 token):套不上标注的走队列识别。
输出尺度对齐作者标注实测分布:tags 4–7 个、use 10–20 字、desc 40–70 字。

状态机

pending ──识别成功──▶ tagged ──确认入库──▶ library ▲ │ │ └──识别失败──────────┘ │ └──移出──────────────┘ 任意状态 ──勾选删除──▶ 移除(二次确认)

AI 只检索 library 中 enabled:true 的条目;pending / tagged 一律不参与。

识别

- 串行逐张,绝不并发;点中止后当前这张跑完就停,其余保持待识别
- 模型:队列页所选;首次自动取「DSH 原生默认 + 支持视觉」的模型并固定,之后改全局默认不跟随;所选模型消失则回落,仍无则提示手动选
- 失败退回待识别并记原因,可重试
- >8MB、空文件、非图片后缀在进队列时就被拒(给出具体原因)

作者实测(2026-10-31):DeepSeek v4.1-flash 打标签完美命中;Qwen(千问) 无法命中大部分标签,基本只返回「其他」;其他大模型未做测试。

斗图

回合结束后,代码没有能力再去改模型已经发出去的那条回复——所以「自动往对话里追加一张图」在协议上做不到。这里的做法是在回合开始前给模型立规矩:

1. 每轮在上下文末尾追加一条 plugin:nekowhale-meme 提示,写明「情绪明显时才发」「一次一张」以及这张图该怎么发出去(见下);
2. 模型自己判断这条消息要不要配图,要就调 meme_send,图直接出现在回复正文里;
3. 关掉「斗图」这一个开关就完全不注入,也就不会为它多花 token。

两种渠道,两种发法

meme_send 的返回值里同时给出「Markdown 图片行」和「本地文件绝对路径」,提示会按当前渠道告诉模型用哪一个:

| 渠道 | 判定方式 | 发法 |
| Web / 桌面 | 普通会话 | 把 名字 原样放进回复正文 |
| IM(QQ / 微信 / 飞书 …) | 入站消息被 dsh-im 包了 <dsh_im_source> | 调 dsh_im_return_file({ path }),把本地原文件交给宿主上传成原生图片 |

为什么 IM 不能用链接:127.0.0.1 是你这台机器上的地址,IM 服务器抓不到;dsh-im 也不会去解析回复正文里的 。而 dsh_im_return_file 是宿主提供的真·文件投递接口——图片按原生图片消息发,失败退回文件附件。注意它需要会话里有这个工具(装了 dsh-im 才有)。

情绪词匹配模式(trigger: keywords)会用纯关键词匹配算出这句话的情绪,连同建议一起写进提示—— 这一步不调模型。模型判断模式(trigger: model)只把判断权交给模型,插件自己不再额外请求一次 LLM。

频率限制=每 10 轮最多 N 张;额度用完当轮就不再注入。meme_send 发图成功会登记到会话计数里,所以限制是真生效的,不是摆设。发送前仍会验证文件存在:失效则删索引 + 记失效清单 + 换下一张,最多验证 3 张,全程静默;3 张都失效才报错。

工具(模型侧)

| 工具 | 作用 |
| meme_import | 收进待识别队列。可给 path / url;都留空 = 取本会话最近一张聊天附件 |
| meme_search | 搜已入库图,返回标签与图片地址(绝对 URL,聊天界面可直接显示) |
| meme_send | 发图(含失效兜底:坏了就换下一张,最多 3 张);返回 Markdown 图片行 + 本地文件绝对路径 |
| meme_browse | 浏览队列或库存(不检索,只看现状) |

meme_browse 原名 meme_list。 原因:它与 yyh-001/dsh-meme 的工具 meme_list 完全同名,两者同装会互相覆盖,所以为提交 dshmarket 收录做的自检里改掉了。
参数(status / group / limit)和行为完全没变——如果你在自定义提示词、skill 或 AGENTS.md 里写过 meme_list,把那一处字符串换掉即可。

识别不自动提供给模型。 图片只能进「待识别」区,必须由你在插件页当面点「识别勾选」才会调用模型打标签——识别消耗 token,这个决定权不交给模型。

[!WARNING]
插件不提供识别工具,但不阻止已获得 shell 权限的模型绕过插件直接改数据——那是宿主与文件权限该管的事。
作者语:都直接改 js 了,我还能怎么办。

收图格式按文件头判,不看扩展名——聊天附件是内容寻址的(attachments/v1/objects/<sha256>,没有后缀),所以留空取附件能直接用;同时改了后缀的假图片也会被挡住。

HTTP 路由

GET /nekowhale-meme/state?tab=&group=
GET /nekowhale-meme/status?scan=1 全量自检:删失效索引 + 记清单 GET /nekowhale-meme/image/<id> 图片直出(Markdown 用它显示) GET /nekowhale-meme/models 可选模型 + 是否支持图片 GET /nekowhale-meme/config | POST /config GET /nekowhale-meme/packs 包清单:包名/张数/体积/已下几张(已剔除双人包) POST /nekowhale-meme/import base64 上传 POST /nekowhale-meme/import-folder POST /nekowhale-meme/import-nekowhale body 可给 packs 数组;每包一个只读组 GET /nekowhale-meme/import-progress 下载进度轮询 POST /nekowhale-meme/tag | POST /cancel POST /nekowhale-meme/confirm | /revert | /revert-to-pending POST /nekowhale-meme/delete 需 confirm:true POST /nekowhale-meme/update 改显示名/情绪/标签 POST /nekowhale-meme/group create / rename / delete / move / removePack(只读包组整包移除) GET /nekowhale-meme/diag 斗图诊断(slot / 配置 / 事件留痕,只读) POST /nekowhale-meme/health/clear 需 confirm:true,整份清空

对外服务(给别的插件用)

插件在进程内注册了一个只读服务 nekowhaleMeme,别的插件用它挑图、发图,不用重复实现检索逻辑:

const meme = ctx.get('nekowhaleMeme') // 没有则 undefined
meme.state() // { ok, dataDir, counts:{pending,tagged,library}, groups:[{id,name,readonly,count,aiVisible}] }
meme.search({ emotion:'开心', limit:8 }) // { ok, memes:[{ id,name,emotion,tags,use,desc,group,path,url }] }
meme.pick({ query:'摸鱼' }) // { ok, id, name, emotion, tags, group, path, url } | { ok:false, reason }
meme.pathOf(id) // 磁盘绝对路径;查不到 ''
meme.urlOf(id) // http://127.0.0.1:<port>/nekowhale-meme/image/<id>;查不到 ''

path 是本地绝对路径,适合交给 dsh_im_return_file({ path }) 这类文件投递接口;url 只在本机可达,适合 Web 回复里的 Markdown 图片。

刻意不暴露写操作——导入、识别打标签、删除、改分组都不在服务里。打标签会消耗真正的模型额度,只能由用户在设置页/队列页当面点,任何插件(包括模型)都不能替你触发。

👥 角色

大肥鱼形象基于 ZipZipPipe 与 上善无形 提供的形象。
大肥鱼:拟人化的 DeepSeek 鲸鱼娘。深蓝长发、呆毛、女仆头饰。
本插件的初始表情包只包含大肥鱼单人形象,不支持双人包。

素材与致谢

表情包作者:B站 可以叫我云大人 / 雾雪 · kiriyuki.com 制作 · 欢迎约原稿同款表情包!

本插件不包含任何表情素材,图都在使用者点「下载初始表情包」时从 kiriyuki.com 按需下载,不作为本仓库的一部分分发。

| 数据 | 来源 | 许可 |
| 插件源代码 | 本仓库 | Apache-2.0(见 NOTICE) |
| 表情包的作者标注数据(emotion/tags/use/desc) | kiriyuki.com 的 /meme/kit/nekowhale.json | CC BY-NC 4.0:可二次分发,必须保留原作者链接与网址,禁止付费或商用 |
| 表情 GIF、角色立绘、模板 | kiriyuki.com 运行时提供 | 归原作者所有,非商业分享须保留作者链接,禁止付费或商用 |

参考实现:dsh-nekowhale-stickers——本插件在功能设计上参考了它(队列/识别/分组的思路),并沿用它的 25 情绪词表与标注文件格式,但代码为本鱼编写,代码的事情全凭天意。

📄 许可

代码采用 Apache-2.0:允许对代码进行二次修改,修改或重新发布同类功能必须保留 NOTICE,即标明本仓库地址与表情包作者链接。

表情包标注数据(见 LICENSE-ASSETS)采用 CC BY-NC 4.0:允许对资源进行二次分发,但必须保留原作者链接和网址,且禁止付费提供或用于其他商业用途。

表情包基础形象和模板由 可以叫我云大人 / 雾雪 · kiriyuki.com 制作。

已知限制

- 识别依赖宿主提供 attachments 服务;拿不到就判失败并提示,不会假成功
- 贴图靠模型主动调用 meme_send:模型不调就一张都不会发(插件不会替它发,也改不了已发出的回复)
- 图以 Markdown 形式出现在回复正文里;IM 渠道能否渲染成原生图片取决于桥接插件
- 大图不做降采样(>8MB 直接拒收)
- 双人包不支持
- 不阻止有 shell 权限的模型绕过插件改数据:插件不提供识别工具,但不阻止已获得 shell 权限的模型绕过插件直接改数据——那是宿主与文件权限该管的事
预览分享卡片长什么样 ↓jimmyalxe/nekowhale-meme
分享 · DeepSeek Harness Hub
jimmyalxe/nekowhale-meme

收集表情图并打标签分组,让 AI 检索斗图发图

这是你的仓库?认领条目

回到顶部