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

Discord 状态同步 nightfun-pixel/dsh-discord-presence

DeepSeek Harness
nightfun-pixel35 天前有提交已提供中文文档扫描:未发现敏感能力

在 Discord 里实时展示当前项目、耗时与 token 用量

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add nightfun-pixel/dsh-discord-presence
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么[目录]—
dsh 原生插件 · platform
暂无时间戳·判据 →
装得上吗[实装验证]!
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
数据截至 2026/10/01·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/05·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 35 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

⚠︎ 实装验证未通过(unknown · 2026/10/1) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

发起外部网络请求
查看扫描证据(共 3 处,展示前 3 条)
  • 发起网络请求
    lib/discord-ipc.js:350
    this.request('SET_ACTIVITY', { pid: process.pid, activity: null });
  • 发起网络请求
    lib/discord-ipc.js:375
    this.request('SET_ACTIVITY', { pid: process.pid, activity: this.desiredActivity });
  • 发起网络请求
    lib/webhook.js:75
    response = await fetch(this.url, {
扫描于 2026/11/5(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 展示当前项目
  • 会话计时
  • 模型与token计数

DeepSeek Harness 的 Discord Rich Presence:正在做的项目、会话计时、模型和 token 计数。零依赖。

README

由 DeepSeek 最新模型翻译生成
DeepSeek Harness 的 Discord Presence 这个插件会在 Discord(Rich Presence)里显示 harness 正在运行:在哪个项目上干活、跑了多久、吃掉了多少 token、转了多少轮、调了多少次工具。你还可以让它写一份机器可读的 status.json,并在每轮结束时往 Discord 频道发一条 embed。 零依赖:只用 Node 标准库和 Discord 原生 IPC(Windows 上是命名管道,Linux/macOS 上是 unix socket)。不需要 discord-rpc,也没有任何东西要编译。 ┌──────────────────────────────────────────────┐ │ default-workspace │ ← details │ waiting for a task │ ← state │ default-workspace · 0 turns · 0 tools │ ← largeText (hover) │ · session 06b20207 │ └──────────────────────────────────────────────┘ 干活的时候: ┌──────────────────────────────────────────────┐
展开完整文档(README 剩余 1 节)
DeepSeek Harness 的 Discord Presence

这个插件会在 Discord(Rich Presence)里显示 harness 正在运行:在哪个项目上干活、跑了多久、吃掉了多少 token、转了多少轮、调了多少次工具。你还可以让它写一份机器可读的 status.json,并在每轮结束时往 Discord 频道发一条 embed。

零依赖:只用 Node 标准库和 Discord 原生 IPC(Windows 上是命名管道,Linux/macOS 上是 unix socket)。不需要 discord-rpc,也没有任何东西要编译。

┌──────────────────────────────────────────────┐
│ default-workspace │ ← details
│ waiting for a task │ ← state
│ default-workspace · 0 turns · 0 tools │ ← largeText (hover) │ · session 06b20207 │ └──────────────────────────────────────────────┘

干活的时候:

┌──────────────────────────────────────────────┐
│ dsh-discord-presence │
│ deepseek/deepseek-v4.1-flash · 1.2M tokens │ │ 4 turns · 17 tools · session 06b20207 │ └──────────────────────────────────────────────┘

卡片全英文、不带 emoji;项目名直接取文件夹原名,是什么语言就保留什么语言(default-workspace、мой-проект)。状态用单词写清楚:running —— harness 起来了,还没有会话;idle —— 有会话,但没动静;working —— 正在跑一轮;waiting for a task —— 会话存在,但还没干过活。俄文文案仍然可以通过 language: ru 启用,默认是英文。

Requirements

* Node.js 20+(harness 自带运行时,所以通常你已经有了)。
* 同一台机器上跑着 Discord 桌面版 —— 浏览器版不支持 Rich Presence。
* 一个 Discord Application ID —— 见下一节。

Quick start

1. 打开 <https://discord.com/developers/applications> → New Application → 名字随便起(比如 DeepSeek Harness)。它只是卡片的容器,不需要 bot。
2. General Information → Application ID → 复制。它是一个 18–19 位的数字。
3. 把它填进插件设置,两种方式都行:
* 图形界面:Settings → Plugins → discord-presence → Client ID 字段 → 保存;
* 文件:往 <DSH_HOME>\profiles\<profile>\cordis.patch.yml 里加一行覆盖配置:

- id: discord-presence
name: 'dsh-discord-presence'
config:
clientId: '123456789012345678'

4. 重启 harness:插件那一行在启动时从 dsh.profile.bundles 读取。
5. Discord 桌面版必须处于运行状态 —— 浏览器里 Rich Presence 不工作。

自定义图片(可选):在 application 里 → Rich Presence → Art Assets 上传一张 PNG,配一个 key,比如 harness,然后设置 largeImage: harness。也可以直接把图片的 https 链接填进 largeImage。留空表示不显示图片。

卡片里都放了什么

| 字段 | 来源 |
| project | 当前会话 cwd 的最后一段(子代理则取父项目) |
| workspace | 完整的 cwd |
| model / provider | session.requestContext() 和 request/context 事件 |
| tokens | 所有会话的总和:uncachedInput + cacheRead + cacheWrite + output |
| turns / steps / tools | 对 turn/、step/、tool/call 事件做折叠统计 |
| elapsed | 当前会话的存活时长(恢复的会话不早于进程启动时间) |
| uptime | harness 进程的存活时长 |
| sessions / subagents | 有多少会话活着,其中多少是子代理 |
| status | running / idle / working / waiting for a task |

当前会话这样挑:先选正在跑 turn 的那个,否则选最新的根会话(子代理永远不会成为卡片标题)。

如果 composition 里有 tokenUsage 投影(ctx.sessionProjections),计数器就取自它 —— 那是服务商的官方数字。没有投影时,插件自己从 assistant/message 事件里统计。status.json 会显示用了哪个来源:usage.source = projection 或 fold。

设置

每个字段都是实时生效的(改完不用重启),设置卡片里就有说明。

| 键 | 默认值 | 作用 |
| enabled | true | 是否在 Discord 里显示 harness |
| clientId | '' | Application ID;没有它就没有卡片 |
| language | en | 卡片语言:en 或 ru。项目名不翻译 |
| showModel | true | 显示模型 |
| showTokens | true | 显示 token |
| showTurns | true | 显示 turn 数量 |
| showTools | true | 显示工具调用次数 |
| detailsTemplate | '' | 完全替换第一行(见占位符) |
| stateTemplate | '' | 完全替换第二行 |
| largeImage | '' | application 里的 asset key,或 https 链接 |
| largeText | '' | 图片的提示文字;留空则用内置摘要 |
| showButton | false | 一个「Open DSH」按钮,链接到 web UI(DSH_WEB_URL) |
| webhookUrl | '' | Discord 频道 webhook:每完成一轮发一条 embed |
| webhookOnTurnEnd | true | 在 turn/end 时发送 webhook |
| webhookOnSessionStart | false | 在会话开始时发送 webhook |
| statusFile | true | 写入 status.json |
| statusFilePath | '' | 自定义路径;留空则用 <DSH_HOME>/discord-presence/status.json |
| minUpdateIntervalMs | 15000 | 卡片更新的最小间隔(Discord 每 20 秒约接受 5 次);0 关闭限流 |
| tickIntervalMs | 30000 | 没有事件发生时,多久刷新一次卡片和文件(最小 5000) |

模板占位符

{project} {workspace} {model} {provider} {tokens} {tokensIn}
{tokensOut} {turns} {steps} {tools} {session} {agent} {status} {elapsed}
{uptime} {sessions} {subagents} {discord}

{session} 是 id 的最后 8 个字符,{tokens} 会缩写(1.2M、17k)。空的部分会连同它前面的 · 分隔符一起丢掉,所以模板不会留下孤零零的点。Discord 会把一行截到 128 个字符——插件自己会先截断。

状态文件

默认路径:<DSH_HOME>\discord-presence\status.json(在 Windows 上类似 C:\Users\<you>\.dsh\discord-presence\status.json)。写入是原子的(tmp + rename),每秒最多一次,写入失败绝不会拖垮插件。

{
"plugin": "dsh-discord-presence",
"version": "1.0.0",
"updatedAt": "2026-09-30T17:42:49.377Z",
"harness": { "pid": 15508, "uptimeMs": 33981, "uptime": "33s" },
"discord": { "enabled": true, "clientId": "missing", "state": "unconfigured", "ready": false },
"activity": { "details": "default-workspace", "state": "waiting for a task" },
"sessions": { "live": 1, "subagents": 0, "active": "session-…", "all": [ /* per session / ] },
"project": { "name": "default-workspace", "cwd": "C:\\…", "agentPreset": "standard" },
"usage": { "total": 0, "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0, "source": "fold" },
"counts": { "turns": 0, "steps": 0, "tools": 0, "retries": 0, "interruptions": 0 },
"webhook": { "configured": false, "sent": 0, "skipped": 0 },
"diagnostics": [ / the last 40 lines of the plugin log / ]
}

这个文件对 OBS、Stream Deck、你自己的脚本或别的插件都很好用——比如画一个「本场直播吃掉了多少 token」的浮层。webhook URL 绝不会写进文件:只保留它的 host,path 会被抹掉。

文件

| 文件 | 里面是什么 |
| index.js | cordis 插件:设置 schema、会话事件订阅、卡片组装、状态文件、webhook |
| lib/discord-ipc.js | 传输层:管道发现 discord-ipc-0..9、opcode\|length\|json 分帧、握手、重连、限流 |
| lib/session-tracker.js | 把事件纯折叠成计数器:token、轮次、工具、活跃会话选择 |
| lib/presence.js | 卡片渲染:行、模板、复数形式、时长与 token 格式化 |
| lib/status-file.js | 原子写入 status.json |
| lib/webhook.js | 限流发送 embed |
| cordis.patch.yml | bundle 插入到配置档组合中的那一行 |
| test/ | 测试(见下文) |

测试

cd <path to the plugin>
node test/presence.test.mjs # 23 — rendering, plurals, templates, toggles
node test/ipc.test.mjs # 12 — framing, handshake, CLOSE, reconnect
node test/plugin.test.mjs # 13 — the whole plugin: mock Discord + a local HTTP receiver

三个测试套件都自包含:各自启动自己的命名管道和 HTTP 服务器,绝不访问外部,跑完自己清理(进程自行退出,不需要 --test-force-exit)。

还有一个针对真实 Discord 的实时传输检查:

node test/probe-live-discord.mjs <ApplicationID>

脚本连接真实管道,完成握手,设置一张卡片然后清除。用假 id 时 Discord 会回 CLOSE 4000 Invalid Client ID —— 这也是个有用的结果。

安装与移除

从 GitHub 安装(仓库是公开的):

dsh plugin --profile web add github:nightfun-pixel/dsh-discord-presence

本地开发 —— 对仓库克隆做 link 依赖:

dsh plugin --profile web add "link:D:/path/to/dsh-discord-presence"

这里的 dsh 就是 node '<DSH_HOME>\..\app\node_modules\@deepseek-ai\dsh\lib\bin.js';plugin 子命令只是把 pnpm 代理到配置档目录。命令本身会把包加到配置档 <DSH_HOME>\profiles\<profile>\package.json 的 dependencies 和 dsh.profile.bundles 里,并在 node_modules\ 中创建 junction。link 依赖里的改动无需重装即可生效 —— 只需重启 harness。

移除:

dsh plugin --profile web remove dsh-discord-presence

故障排查

| 现象 | 原因与处理 |
| discord.state: "unconfigured" | 没有设置 clientId。填上并重启 harness。 |
| discord.state: "invalid-client-id" | Discord 回了 CLOSE 4000 —— Application ID 打错了。插件刻意不做循环重连;改对 id 即可(改动会即时生效)。 |
| discord.state: "offline" | Discord 没运行,或没找到管道。检查 \\.\pipe\discord-ipc-0(Windows)。客户端一出现,插件会自己重连。 |
| 卡片在,但是空的 | 会话还没跑过一轮:显示 waiting for a task。 |
| 没有卡片,但日志显示 connected | Discord 只对桌面客户端显示活动,而且应用至少要有一个活动;等过 15 s 限流。 |
| harness 看不到插件 | 那一行没进 dsh.profile.bundles,或者 harness 没重启。用 --dump-config 检查: |

dsh --profile web --dump-config | Select-String -Pattern 'discord-presence' -Context 0,10

插件日志写在 status.json(diagnostics)里,也会以 [discord-presence] … 行的形式输出到 harness 的 stderr。

限制

Rich Presence 只在 桌面版 Discord 客户端运行时才有效。
* Discord 大约每 20 秒只接受 5 次更新——所以默认节流设为 15 秒;计数器不受此影响,每个事件仍会照常计算。
* 插件不订阅未知事件:遇到无法识别的事件类型会直接忽略,而不是让处理函数崩溃(见 diagnostics 里的 lastEventType)。
* 除了可选的 webhook,不发任何网络请求。Application ID 是公开标识,不是密钥;插件从不读取 token 或密钥。
预览分享卡片长什么样 ↓nightfun-pixel/dsh-discord-presence
分享 · DeepSeek Harness Hub
nightfun-pixel/dsh-discord-presence

在 Discord 里实时展示当前项目、耗时与 token 用量

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部