Skip to content

dsh-bili-meme

Verified

dsh-bili-meme · v0.3.1 · MIT

DeepSeek Harness 插件:让 AI 发 B站评论时带上表情。697 条短代码按包内置(小黄脸/番剧/游戏),可按作品开关,发送前校验。

Install

dsh plugin add dsh-bili-meme

Confirm the layer applied with dsh --profile default --dump-config — see the install guide.

Source

Tags

Creators

Readme

dsh-bili-meme

让 DeepSeek Harness 里的 AI 发 B站 评论时带上表情,而不是把 [笑哭] 抄成一串看不懂的方括号。

B站 评论正文里原样写 [笑哭]、[doge]、[吃瓜] 这类短代码,服务端就会把它渲染成表情图。但模型并不知道哪些短代码合法——自己编一个 [笑死]、[猫猫头],发出去只会显示成一行方括号文字。

这个插件把评论区实际可用的表情面板(默认抓取 697 条 / 18 个包,含小黄脸、tv_小电视、热词系列、收藏集、颜文字等)做成可检索的词表,并提供取候选与发送前校验两个动作。

它解决什么、不解决什么

✅ 解决 模型按情绪/关键词挑到真实存在的短代码;发之前能校验正文里的短代码是否合法
✅ 解决 一条评论里表情的自然用法(放句尾、最多 2-3 个)由提示词约束,不靠模型自觉
❌ 不解决 图片投递。评论区表情是服务端渲染的,不需要本地图片;这跟 dsh-meme 那种「发图片」完全是两条通道
❌ 不解决 解锁付费/未拥有表情。面板返回的是你账号可用的那批,换号会有差异

安装

插件市场 / npm:

dsh plugin --profile web add dsh-bili-meme

本地开发(目录放进你 profile 的 node_modules,并在 bundles 里加上 dsh-bili-meme):

git clone https://github.com/ACE-DGWSKK/dsh-bili-meme.git
cd dsh-bili-meme
npm test

零依赖、无构建步骤——index.js 直接就是入口,改完即生效。

它给模型什么

工具 bili_meme

参数 说明
tag 情绪:laugh / happy / love / shy / sad / angry / confused / surprised / tired / money / cool / refuse / meow / daily / mood / kaomoji,也认中文(笑、开心、生气、无语…)
query 关键词:搜短代码 / 中文名 / 图库名,如「猫」「吃瓜」「doge」「塔菲」
limit 返回几张候选,1-12,默认 6
check 校验模式:传一段准备发的正文,返回其中合法/不合法的表情标记

返回长这样:

laugh(笑/乐) 共 33 个,随机给 5 个:
1. [笑哭] — 笑哭 · 小黄脸
2. [滑稽] — 滑稽 · 小黄脸
...
用法: 短代码原样拼进评论正文即可渲染,别改字、别加空格。一条评论最多 2-3 个,放句尾更自然。

提示词段:插件会往 system prompt 里加一条 dsh-bili-meme:emotes,告诉模型「想带表情先调 bili_meme 取候选、短代码必须抄候选原文、别自己编」。它不铺开整张词表——铺了既烧 token 又诱导模型乱抄。

词表从哪来 / 怎么更新

接口:https://api.bilibili.com/x/emote/user/panel/web?business=reply

BILI_SESSDATA=你的SESSDATA node scripts/gen-emotes.mjs

脚本会把面板重新抓一遍并重写 emotes.js(同时按关键词给每条打情绪 tag)。不带 cookie 时接口可能返回空面板——这个面板是账号维度的。

emotes.js 是生成文件,别手改。

配合什么用

  • 配 bili_reply(刷B站 插件的评论工具):先 bili_meme 取候选,把短代码拼进 text 再发
  • 单独用也行:check 模式就是个「这段正文里的表情能不能渲染」的离线校验器

按作品开关表情包

词表里的 697 条来自 18 个包(小黄脸、tv_小电视、热词系列、颜文字、Mygo、鸣潮×2、塔菲×2、贝拉、卦者灵风、粉妆玉琢……)。全部内置在 emotes.js 里,装上就有;但一次只给模型看需要的那些,候选才不会被无关表情淹没。

bili_meme_packs { action: "list" }                   # 列出 18 个包,* = 已启用
bili_meme_packs { action: "only", packs: "mygo 鸣潮" }  # 只留这两个
bili_meme_packs { action: "enable", packs: "塔菲" }     # 加一个
bili_meme_packs { action: "disable", packs: "热词" }    # 关一个
bili_meme_packs { action: "all" }                    # 全开(默认)

也可以直接问:「只开 Mygo 和鸣潮的表情包」,模型会自己调这个工具。

状态存在 $DSH_HOME/dsh-bili-meme/settings.json:

{ "mode": "some", "enabledPacks": ["5390", "9996"] }

mode: "all"(默认,或文件不存在)= 全开;mode: "some" + 空数组 = 全关(bili_meme 会明确告诉你没有可用表情)。改完立即生效,不用重启。

目前没有 GUI 设置面板,改开关只有两条路:对话里让模型调 bili_meme_packs,或直接编辑这个 JSON。

自动更新

插件启动 8 秒后查一次 npm(registry.npmjs.org/dsh-bili-meme/latest),之后每 6 小时一次。发现新版本就把 tarball 解到:

$DSH_HOME/dsh-bili-meme/versions/<version>/     # 或 ~/.dsh/dsh-bili-meme/...
$DSH_HOME/dsh-bili-meme/state.json              # 记当前装的是哪一代

下一次启动由 index.js 读 state 决定加载哪一代;加载失败会记一笔并退回自带版本,不会把插件弄挂。

  • 不动 profile、不改自己的文件——只往插件家目录写,删掉那个目录就回到自带版本;
  • 只解 package/ 前缀、拒绝 ..,tarball 当敌意输入处理;单包上限 8 MB;
  • 关掉:bundle patch 里给这个插件加 config: { update: { enabled: false } }(离线/审计环境用)。

⚠️ 这套机制依赖入口是包名或稳定入口文件。如果 profile 的 patch 直接写死某个版本的 index.js 路径,那永远只会加载那一份——这也是 dsh-meme 当年踩过的坑。

为什么你会看到【方头括号】

表情是服务端渲染的:短代码在表情表里有 url 才出图。收藏集 / 充电专属那类表情,收评论的人没解锁(没买、没充电),服务端没有图可给,就把原文降级成 【包名_表情】 —— 这就是粗方头括号的来历。

所以有两件事要分清:

  • 输入永远写半角 [xxx]。【】 不是输入语法,写了只会原样显示(真实评论里能抓到 [暖]【狗头】 这种半角混粗括号的,粗的那个没渲染)
  • 挑到付费表情,对方可能只看到文字。所以插件给 paid: true 的候选打了「需拥有」标记,默认候选优先免费表情

表情包类型(面板里的 type):1 官方免费、4 颜文字(纯文本)、3 收藏集、12 充电专属。后两种在词表里是 paid: true。

已知限制

  • 表情渲染在客户端:网页/App 里显示为图,第三方客户端或导出文本里就是 [笑哭] 原文
  • 颜文字包(tag=kaomoji)是纯文本,不带方括号,别给它套 []
  • 评论长度上限、表情数量上限由 B站 服务端决定,插件不代管

License

MIT