tjiisztiuv/dsh-plugin-discord ↗★ 0

dsh-plugin-discord

通过 Discord 机器人远程控制工作区会话 适合需要在手机或桌面 Discord 客户端上随时随地与 DSH 工作区进行交互的用户。

包名
dsh-plugin-discord
兼容性
待验证
Cordis 依赖范围
>=4.0.4-0 <5 || ^4.0.5-0
版本
0.1.0
许可证
MIT
最近更新
2026年10月11日

同名包的其他仓库

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:tjiisztiuv/dsh-plugin-discord

3. 配置 token

token 不写进配置文件,而是通过 dsh 的凭据系统读取(默认变量名 DISCORD_BOT_TOKEN)。任选一种:

  • 写到 ~/.dsh/.env:DISCORD_BOT_TOKEN=xxxxx
  • 或写到 ~/.dsh/.credentials.yaml(dsh 本地凭据库)

.env 只在桌面端启动时读取一次:写入或修改后要彻底退出(Cmd+Q)再重新打开,只在插件页重新启用读不到新值。变量名要和配置里的 tokenEnv 完全一致。

4. 填写配置(必须)

插件默认 allowedUserIds 为空,此时 bot 不会上线(日志里会提示)。在 profile 自己的 cordis.patch.yml 里覆盖 discord 这一行,例如桌面端是 ~/.dsh/profiles/desktop/cordis.patch.yml:

- id: discord
  config:
    tokenEnv: DISCORD_BOT_TOKEN
    allowedUserIds: ['123456789012345678']     # 你的 Discord 用户 ID
    stateFile: !!js dshHomePath('discord', 'state.json')
    defaultWorkspace: my-project                # 可选:没选工作区时默认用哪个(标题/路径/ID)
    # allowedGuildIds: ['...']                  # 可选:只在这些服务器响应
    # allowedChannelIds: ['...']                # 可选:只在这些频道(及其线程)响应

patch 会整体替换这一行的 config,所以要把需要的键都写全。保存后启用了 HMR 的 profile 会自动重载;否则重启桌面端。

全部配置项

字段默认值说明
tokenEnvDISCORD_BOT_TOKENbot token 的凭据引用名
allowedUserIds[]允许使用 bot 的用户 ID;为空时 bot 不上线
allowedGuildIds[]服务器白名单,空 = 不限制(不影响私信)
allowedChannelIds[]频道白名单,线程按父频道匹配,空 = 不限制(不影响私信)
stateFile~/.dsh/discord/state.json频道 ↔ 会话绑定的持久化文件
defaultWorkspace—频道没选工作区时使用的工作区
timeZone本机时区随 prompt 发送的 IANA 时区
approvalsracerace:Discord 与桌面端同时可审批,先答者生效;desktop:只在桌面端审批
questionsracerace:模型提问(ask_user_question)同时发到 Discord 与桌面端,先答完者生效;desktop:只在桌面端回答
toolCallscompactcompact:每轮一条可编辑的工具调用进度消息;off:不显示
showReasoningfalse以引用格式显示模型思考过程
mirrorDesktopInputtrue把在桌面端输入的消息同步到 Discord
registerCommandstrue上线时注册全局斜杠命令
commandPrefix!文本命令前缀
messageChunkSize1900单条 Discord 消息最大字符数(上限 2000)
sessionListLimit10/sessions 列出的会话数
progressMaxLines12进度消息保留的工具调用行数
progressEditIntervalMs1500进度消息最小编辑间隔
typingIntervalMs8000运行中「正在输入」提示的刷新间隔
maxImageBytes8 MiB转发给模型的图片附件上限
approvalArgumentChars900审批卡片里展示的工具参数字符数
requestTimeoutMs60000调用 Host API(新建、发送、列表)的超时

全部配置项

字段默认值说明
tokenEnvDISCORD_BOT_TOKENbot token 的凭据引用名
allowedUserIds[]允许使用 bot 的用户 ID;为空时 bot 不上线
allowedGuildIds[]服务器白名单,空 = 不限制(不影响私信)
allowedChannelIds[]频道白名单,线程按父频道匹配,空 = 不限制(不影响私信)
stateFile~/.dsh/discord/state.json频道 ↔ 会话绑定的持久化文件
defaultWorkspace—频道没选工作区时使用的工作区
timeZone本机时区随 prompt 发送的 IANA 时区
approvalsracerace:Discord 与桌面端同时可审批,先答者生效;desktop:只在桌面端审批
questionsracerace:模型提问(ask_user_question)同时发到 Discord 与桌面端,先答完者生效;desktop:只在桌面端回答
toolCallscompactcompact:每轮一条可编辑的工具调用进度消息;off:不显示
showReasoningfalse以引用格式显示模型思考过程
mirrorDesktopInputtrue把在桌面端输入的消息同步到 Discord
registerCommandstrue上线时注册全局斜杠命令
commandPrefix!文本命令前缀
messageChunkSize1900单条 Discord 消息最大字符数(上限 2000)
sessionListLimit10/sessions 列出的会话数
progressMaxLines12进度消息保留的工具调用行数
progressEditIntervalMs1500进度消息最小编辑间隔
typingIntervalMs8000运行中「正在输入」提示的刷新间隔
maxImageBytes8 MiB转发给模型的图片附件上限
approvalArgumentChars900审批卡片里展示的工具参数字符数
requestTimeoutMs60000调用 Host API(新建、发送、列表)的超时

使用

直接发消息 = 发给这里绑定的会话;没有绑定时,会在当前默认工作区新建一个会话(文字频道里会自动开线程)。图片附件会作为图片输入发给模型,其他附件以链接形式附在消息里。

斜杠命令文本命令作用
/ws!ws列出工作区(👉 为当前默认)
/use workspace!use 切换这里使用的工作区;如果这里绑定的会话属于别的工作区,会自动解绑,下一条消息在新工作区新建会话
/new [prompt] [workspace]!new [内容]新建会话
/sessions [workspace]!sessions最近会话(▶️ 运行中,📍 当前绑定)
/attach session!attach 接入已有会话,例如桌面端正在跑的那个
/detach!detach解绑(不删除会话)
/stop!stop停止当前任务(排队的消息保留)
/steer text!steer 任务运行中插话引导
/status!status查看绑定的工作区和会话
—!help帮助

斜杠命令的 workspace / session 参数都支持自动补全。全局命令首次注册后可能要等几分钟才出现在客户端里,期间可以先用文本命令。

回答模型提问

模型调用 ask_user_question 时,绑定的频道里会逐题出现问题卡片(一次问多个问题时答完一题出下一题):

  • 单选:每个选项一个按钮,点一下即回答;计划审阅(plan mode 的 exit_plan_mode)里表示批准的选项是绿色按钮。
  • 多选:从下拉菜单里选一项或多项。
  • ✏️ 其他… / ✏️ 回答… 弹出输入框写文字回答;跳过 跳过这一题。
  • 也可以直接发消息回答:回复选项序号(多选用逗号分隔,如 1,3)、选项原文,或任意文字。问题等待回答期间,频道里的普通消息都会被当作回答。

桌面端开着时两边同时可答,先答完的一方生效,另一边的卡片会自动收起;桌面端没开时只在 Discord 回答。限时提问(tool-ask-user 配置为 mode: timed)超时后模型会先继续工作,卡片显示「等待超时」。

一个会话同一时间只绑定一个 Discord 位置:在别处 /attach 同一个会话时,原来的位置会收到「已转到 …」的提示。