dsh-meme-copy-own
Verifieddsh-meme-copy-own · v0.1.2 · MIT · Web UI
给已安装 dsh-meme 的 DSH 聊天加一个「复制图片」按钮(配套插件,需配合 dsh-meme 使用)
Install
dsh plugin add dsh-meme-copy-own Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Readme
dsh-meme-copy-own
配套插件,需与
dsh-meme一起使用。本插件不生成表情包,只给
dsh-meme已经渲染出来的表情图(img[data-meme-img])和它的选择面板 (div.mp-cell)各加一个「复制图片」按钮。没装dsh-meme时,本插件不产生任何可见效果。二者关系:独立实现、零代码继承——本插件不改
dsh-meme的任何文件,只读取它写进 DOM 的标记; 因此dsh-meme升级通常不影响本插件,但若上游改了data-meme-img或.mp-cell这两个选择器,复制按钮会失效, 届时需要跟着改本插件。
给 DSH 聊天里的表情包加一个按钮:复制图片。点它 → 图片进剪贴板 → 到微信/QQ/任何收粘贴图片的软件里按 Ctrl+V 就能发出去。
就这一件事,没有别的:不装外部程序、不联网、不读文件、不写注册表、不设开机自启、不注册热键。删掉插件目录并把 profile 里那两行去掉,界面立刻恢复原样。
安装
profile(C:\Users\<你>\.dsh\profiles\desktop\package.json):
{
"dependencies": { "dsh-meme-copy-own": "link:D:/DSH/plugins/dsh-meme-copy-own" },
"dsh": { "profile": { "bundles": [ /* ... */ "dsh-meme-copy-own" ] } }
}
node_modules 里要有对应条目(pnpm 的 link: 就是指向插件目录的目录联接 / Junction;手工建:New-Item -ItemType Junction -Path <node_modules>\dsh-meme-copy-own -Target D:\DSH\plugins\dsh-meme-copy-own)。然后重启 DSH 桌面端——新插件不是热改。
用法
把鼠标移到聊天里的表情包上 → 右上角出现复制图标 → 点一下 → 左下角会提示「已复制图片」,然后去微信/QQ 输入框 Ctrl+V。
失败不会静默:图标变红,并弹出提示写明原因(最常见是宿主未授予剪贴板写入权限)。
为什么用剪贴板而不是拖拽
从浏览器窗口把图片拖出去给不了真文件(CF_HDROP),微信/QQ 都不认——本机实测过,并且全量扫描 DSH 的 app.asar 确认整个应用没有原生拖拽通道。剪贴板是网页端唯一可靠的出路。
设计约束
- 不改
dsh-meme任何文件,只挂在它注入的img[data-meme-img]标记上;它升级不影响本插件。 - 聊天 DOM 里没有文本节点:
dsh-meme刻意维持消息textContent与原始[表情: x]一致(其它插件靠这个判断消息是否被改过)。所以按钮只用 SVG 图标 +title,提示浮层挂在document.body上,不在聊天流里。 - 图片离开 DOM 就拆掉包装:
dsh-meme去重时会随时remove()掉重复的img。 - 零依赖:客户端半边不
require任何包。
测试
node dsh-meme-copy-own/tests/client.test.mjs
别用
node --test <目录>:它靠子进程 + 管道 stdio 跑用例,会被 DSH 文件沙箱拒(spawn EPERM)。直接node <文件>,node:test在本进程内跑。
DOM 部分(悬停按钮、点击、剪贴板)无法无头验证,人工验收:重启 DSH → 悬停表情包 → 点复制 → 微信/QQ 里 Ctrl+V。