dsh-guild
seolhw/dsh-guild
Discord-like communities in DSH with channels, roles and permissions, message search, and sharing or cloning of DSH sessions.
インストール
dsh plugin --profile web add github:seolhw/dsh-guildREADME
DSH-Guild
把「社区」装进 DSH —— 在 DeepSeek Harness 里直接和同好聊天、提问求助、发通知,社区内容与你的 Agent 工作区不再割裂。
一个面向 DSH 用户的类 Discord 社区插件:注册一个社区账号后,就可以在 DSH 面板里自建或加入社区,实时聊天、贴图传文件、@ 提醒、管理成员,全程不需要跳出 DSH。
同样的模型也适用于团队内部沟通、兴趣小组或课程答疑 —— 只要有 DSH,就能当社区客户端用。
使用场景
每个场景一份完整文档:社区与频道怎么建、角色权限怎么勾、日常运营动作怎么做。
| 场景 | 文档 | 适合谁 |
|---|---|---|
| DSH 插件作者管理社区 | 场景一:插件作者管理社区 | 插件 / 技能作者,要发版公告、收集反馈、分流讨论 |
| 团队 / 小组内部协作 | 场景二:团队内部协作 | 用 DSH 干活的小团队,要把沟通和会话上下文放在一起 |
| 会话分享广场 | 场景三:会话分享广场 | 想运营公开社区,让别人分享 / 克隆 DSH 会话 |
应用截图





功能清单
账号与身份
- 邮箱注册:注册后发送 6 位验证码,验证通过才能登录
- 邮箱 + 密码登录,会话安全保存(Bearer)
- 忘记密码:通过邮箱验证码在面板内直接重置密码(无需打开邮件链接)
- 修改用户名、上传 / 更换头像
- 退出登录
社区
- 一键创建社区(公开 / 私有),自动生成固定不变的邀请码与默认频道;并自动在「公告」频道发一条置顶开箱指南,新社区不会是空白
- 公开社区直接加入;私有社区凭邀请码加入
- 发现公开社区:侧栏「+」弹窗切到「发现」,浏览公开社区目录、按名称 / 简介搜索,已加入的一键进入;列表展示活跃度(最近发言时间、近 7 天消息数)并支持热门 / 活跃 / 最新排序,官方社区置顶并带「官方」标记
- 官方社区种子:部署者可用管理接口一次性幂等写入官方社区(含各频道置顶说明帖),给新用户一个有内容的落脚点
- 我的社区列表:未读频道数 +
@提及未读数一目了然 - 编辑社区名称 / 简介 / 可见性 / 头像
- 成员管理:成员列表与搜索、按角色分配 / 收回、移除成员、转让所有权
- 封禁 / 解封:把成员拉黑以阻止其重新加入,随时可在成员面板解封
- 所有者可删除社区(频道、消息、成员级联清除)
- 加入 / 自建社区数上限(各 20 个);自建另受每 24 小时 5 个的滚动频率限制,防止滥用
频道
- 三种互斥频道定位,侧边栏按类型区分图标:
- 文字 —— 全员自由发言
- 公告 —— 默认对
@everyone只读,仅所有者或经频道权限放行「发送消息」的角色 / 成员可发 - 话题 —— 频道主面板即话题列表,点进某条话题才聊天(24h 无人回复自动归档)
- 频道的创建、改名、改主题、改类型、删除、排序(上移 / 下移)
角色与权限
- Discord 式角色模型:每个社区自带
@everyone(隐式作用于全体成员)与一个预设「管理员」角色(就是普通角色,权限按建社区时的全部权限位初始化,可改名可删除可改权限,需手动分配) - 自定义角色:新建 / 改名 / 配色 / 删除、上移 / 下移调整层级;成员可同时持有多个角色,基础权限按并集计算
- 细粒度权限位:查看频道、发送消息、发起 / 管理讨论组、管理消息 / 频道 / 社区 / 角色、邀请成员、踢人、封禁
- 频道权限覆盖:针对
@everyone/ 角色 / 成员单独设置 allow / deny(仅频道级权限位) - 层级防提权:只能操作层级严格低于自己的角色与成员,也不能授予自己没有的权限位
- 权限变更实时下发:在线连接被重新校验,失去频道可见性的连接会被主动断开
讨论组(话题)
- 文字 / 话题频道下可开讨论组:独立成串、24 小时无人发言自动归档(发言即恢复)
- 可见性:公开(社区成员自由进出)/ 私密(非成员可见但加锁)
- 私密组可设进入密码:有密码可凭密码进入;未设密码则只能由组内成员拉入
- 组内成员可从社区成员中拉人、移出成员;成员可自行退出
消息
- 文本消息,
@成员提及并高亮提醒;@everyone可全员提醒(计入提及未读) - 附件:图片(内联预览)与任意文件(下载),一条消息最多 4 个;支持粘贴 / 拖拽直接加入待发送附件
- 编辑 / 删除消息(作者本人,或拥有「管理消息」权限的人)
- 消息置顶:有「管理消息」权限的人可置顶 / 取消置顶,头部置顶面板可查看并跳转到原消息
- 表情回应:给消息加 emoji(同人同 emoji 再点即取消),按 emoji 聚合并实时同步
- 消息搜索:按关键词模糊匹配社区内消息正文;可用频道 / 作者 / 时间范围(24h / 7d / 30d)/ 仅
@我收窄范围,倒序返回 - 实时收发:新消息、编辑、删除、表情回应即时同步到所有在线成员
实时与未读
- 每个频道一条 WebSocket 长连接,心跳保活、断线自动重连(重连后自动补拉断线期间的消息)
- 输入中状态:同房间成员正在输入时,输入框上方显示「xxx 正在输入…」
- 频道头部显示当前在线人数,点开可看在线成员与状态(在线 / 离开随窗口焦点自动切换)
- 社区在线聚合:跨频道与活跃讨论组按用户去重,侧栏与成员面板展示社区在线成员
- 已读状态上报;社区栏未读气泡与
@提及提醒(频道与讨论组各一套)
邀请与站内信
- 邀请已注册用户加入(用户名或邮箱)→ 对方收到站内信 + 邮件
- 收件箱:接受 / 拒绝邀请、已处理状态、一键全部已读、铃铛未读角标
分享
- 分享 DSH 会话:把本机一个 DSH 会话打包分享到社区;他人点开卡片弹窗即可「克隆到本地的会话」
- 分享卡片:发消息时可附带一张自己创建的分享,卡片内嵌在消息里;点击卡片弹出详情(分享者 / 大小 / 时间 / 事件数),可下载包体
安装插件
把插件装进你自己的 DSH profile 即可。
前置条件:
- Node ≥ 20
- 已安装 pnpm
npx @deepseek-ai/dsh。
安装到 profile
# 从 npm 装进 web profile(推荐)
npx @deepseek-ai/dsh plugin --profile web add dsh-guild@0.0.3
# 启动 DSH Web
npx @deepseek-ai/dsh web
也可以直接从 GitHub 装最新源码:
npx @deepseek-ai/dsh plugin --profile web add github:seolhw/dsh-guild
代理设置(可选)
Server 地址为 https://dsh-guild-api.huiwang.fun ,部署在 Cloudflare 上,国内直连可能不稳定;在代理工具里让这个域名走代理即可。
浏览器打开 https://dsh-guild-api.huiwang.fun/healthz 能返回 JSON,即说明链路已通。
首次使用
- 启动后侧栏底部出现 DSH-Guild(社区) 入口,即安装成功。
- 在面板内用邮箱注册账号,查收 6 位验证码完成验证,然后创建或加入社区。
升级与卸载
npx @deepseek-ai/dsh plugin --profile web update dsh-guild # 升级到 npm 最新版
npx @deepseek-ai/dsh plugin --profile web remove dsh-guild # 卸载(同时从 dsh.profile.bundles 移除)
想在本仓库里边改边跑(热重载、watch 打包),或者想自己托管 Server,见下面的「更多文档」。
架构一览
flowchart LR
subgraph A["用户 A 的 DSH(本地)"]
UI["DSH-Guild 聊天面板(client)"]
HOST["DSH-Guild host<br/>本地配置 / 克隆会话"]
UI <--> HOST
end
subgraph C["Cloudflare(Server)"]
API["Worker<br/>REST + WebSocket"]
DO["Durable Object<br/>每频道实时广播"]
D1[("D1<br/>用户 / 社区 / 频道 / 消息 / 邀请")]
R2[("R2<br/>附件 / 分享包")]
API --> DO
API <--> D1
API <--> R2
end
UI -- "WSS + REST(Bearer)" --> API
- client(浏览器):聊天界面、WebSocket 实时连接、附件直传、站内信。
- host(Node.js):保存 serverUrl / token 等本地设置;读本机 DSH 会话并打包成分享包,也能把分享包还原成本地会话。
- server(Cloudflare):唯一的数据中心——REST + WebSocket API、每频道一个 Durable Object 做实时扇出、D1 存业务数据、R2 存附件与分享包;完全自包含,可按 自部署 Server 自己托管一个。
插件设置(DSH 设置页)
| 键 | 默认 | 说明 |
|---|---|---|
serverUrl | https://dsh-guild-api.huiwang.fun | Server 地址;自托管就改成自己的域名 |
handle | "" | 当前账号用户名(登录后自动写入) |
token | ""(secret) | 会话令牌,登录后自动写入 |
autoReconnect | true | WebSocket 断线自动重连 |
share.maxSizeMb | 50 | 会话分享包体积上限 |
首次启动会把默认的 serverUrl 写进 DSH 的 settings 文档($DSH_HOME/settings.yaml 的 guild 段),之后它就以这份配置为准:
guild:
serverUrl: https://dsh-guild-api.huiwang.fun
想连别的后端(自托管 / 本地 Server),在 DSH 设置页的插件设置里改,或直接改上面这个文件 —— 不用改代码,改过的值不会被启动流程覆盖。本地开发另有 BETTER_AUTH_URL 环境变量作为临时覆盖(见 参与开发),它只影响当次进程、不写进 settings 文档。
Server 环境变量
Server 端的 BETTER_AUTH_SECRET / BETTER_AUTH_URL / RESEND_API_KEY / ADMIN_TOKEN 与业务限额,见 自部署 Server。
更多文档
| 文档 | 内容 |
|---|---|
| 场景一:插件作者管理社区 | 建社区 / 配频道 / 建「维护者」角色、发版公告与置顶、内测群、封禁与所有权转让 |
| 场景二:团队内部协作 | 私密社区 + 邀请、角色分层、讨论组与搜索、分享会话给同事复现 |
| 场景三:会话分享广场 | 公开广场的规则与频道设计、策展人角色、精选置顶、分享 / 克隆的注意事项 |
| 参与开发 | 仓库结构、本地跑通全栈(pnpm build / pnpm dev / pnpm dev:server)、overlay 加载机制、常用命令与提交约定 |
| 自部署 Server | 把 Server(Hono Worker + D1 + R2 + Durable Object)部署到自己的 Cloudflare 账号;环境变量、发信配置与官方社区种子 |
License
MIT