多会话群聊 + 一夜狼人杀 · DSH 庄家插件
一个插件,两件事:多会话群聊(房间、@ 唤醒、归档/合并/删除房间、成员头像)和 一夜狼人杀庄家——发牌、夜序、换卡、计票、结算全部是确定性代码,不是 LLM 会话; 可以纯 AI 对局,也可以 1 真人 + 多个 AI 一起玩。

由
dsh-chat/dsh-bridge的本地魔改版合并而来(v2.0.0 起单包),来源见文末「许可与来源」。
要求:DSH >= 0.2.0-rc.1,Node >= 22。
1. 安装
# 推荐:在 DSH 里按包名安装(装包 + 自动启用)
dsh plugin --profile <你的 profile> add dsh-werewolf-dealer
# 或者只装依赖,再到插件管理里启用
npm i dsh-werewolf-dealer
装完重启 DSH。
- 替换旧装法:如果之前单独装过
dsh-chat/dsh-bridge,先把它们从 profile 的dsh.profile.bundles里移除(或直接卸载),再重启 —— 与本包同时启用会重复注册dshChat/dshBridge两个服务。 - 卸载:
dsh plugin --profile <你的 profile> remove dsh-werewolf-dealer(或plugin_manager remove_bundle dsh-werewolf-dealer)。私有状态目录不会自动删除,需要时手动删。
单包说明:群聊房间(原
dsh-chat)与跨会话投递/唤醒(原dsh-bridge)已并入本包 —— 装这一个就够,不要再装那两个(会重复注册同名服务)。老房间与老数据不用迁移。秘密不进模型上下文:模型只看到固定模板串,永远看不到牌面;一局的状态与判定都能从审计文件复现。
2. 功能一览
2.1 群聊功能
开启会话后直接对它说「创建 XX 名字的群聊」,AI 会创建新的活跃房间并把自己加进去。
- 成员名字 = 会话名,而且在加入房间那一刻固化 —— 之后改名仍显示老名字,想刷新就移除再重新加入;建议先改名再加入。
- 加入已有房间:对它说「加入 XX 名字的群聊」。
- 数据位置:房间默认在
Chatrooms工作区,数据在$DSH_HOME/dsh-chat/rooms.json,头像在avatars.json。 - 默认最多 5 个活跃房间(
MAX_LIVE_ROOMS,不可配置):新建第 6 个时,最早的那个自动整房冷存。也可以在「合并房间」面板里直接建冷存房间,把活跃房间的消息归档合并进去。冷存房间数量无限制;单个建议 3MB 以下(经验值,无硬限制)。
活跃房间的唤醒功能
「@all」按钮把消息投递到所有成员会话,但不唤醒任何会话。
- 勾选「唤醒」+ @all:投递并唤醒全员;被唤醒的会话在本房间的下一条消息里,提及会被整体替换成
all(纯广播、不再分别唤醒),发一次即清。 - 单独「@成员名」:只唤醒那一个会话,它的回复不会投递给其他成员。
- AI 也可以自己填要唤醒的成员名,所以它们互相 @ 并连续唤醒是可能发生的;一般几轮内会收敛,若两个会话持续互刷,需要手动停止。
- 会话可以选不同品牌与模型,所以能体验到不同 AI 对话的乐趣。
头像设置
例子:
{
"_help": "房间头像映射。键 = 成员会话 id 或成员别名,也可以写房间自己的会话 id(真人发言那侧);同一个图片路径可以挂多个别名 —— 键里用 | 分隔(也接受 、 与 ,),例如 \"大D(v4.1)|大Dv4.1|大D\"。值 = 本地图片绝对路径(反斜杠要写成\\)、http(s) 链接或 data URL。缺项 / 路径读不到 / 非图片扩展名 / 超过 4MB 的条目会被跳过并回落首字母色块。改完保存、刷新页面即生效,无需重启。",
"_keys": "成员 id 见 $DSH_HOME\\dsh-chat\\rooms.json;",
"大D(v4.1)|大Dv4.1|大D": "http://<你的图床>/deepseekv41.webp",
"小米(mimo)|小米mimo|小米": "D:\\头像\\mimo.webp",
"你|千野": "http://<你的图床>/user_avatar.png"
}
2.2 狼人杀玩法
准备工作
新建一个干净的工作区,把插件自带的三个文档复制进去:
docs/AGENTS.入座模板.md、docs/狼人杀方法论.md、docs/新版一夜狼人杀规则卡.md(npm 安装后在node_modules/dsh-werewolf-dealer/docs/)。把
AGENTS.入座模板.md重命名为AGENTS.md:里面是「自动读取规则与方法论、按首句改会话名、加入『AI狼人杀』房间」的指令。推荐再装会话自动重命名插件:
dsh plugin --profile <你的 profile> add dsh-session-rename。这样开新会话只需打个招呼,它就会自动读规则、改名、入座:
用户:你好啊,大D 会话:(自动读取规则卡和方法论)(自动判断重命名会话成「大D」)(自动加入群聊房间「AI狼人杀」)
方法论是作者家 AI 玩了 30 局后总结的经验;如果你希望自家 AI 从头研究,可以删掉其中一部分。
顺便插件附带了一个Agent预设「狼人杀模式」,就是DSH的极简模式+有AGENTS.md注入,可以保证排除各种记忆插件的干扰(防止AI中途写下日志等被其他会话读到泄底)。
开始玩
房间按钮开局(推荐):人数 3~6,可纯 AI,也可 1 真人 + 其他 AI。确定人数后,点群聊房间输入框右侧的「开局」按钮。
- 勾选「随机」⇒ 发言顺序随机打乱(不勾则按加入房间的顺序)。
- 勾选「真人」⇒ 你作为玩家之一下场,与 AI 一起玩。
- 全程由庄家掌控流程:真人/AI 都不用记顺序,轮到谁由庄家提示或由上一位的发言唤醒。
AI 其实蛮弱的,你能一眼看穿的破绽它们不一定知道;遵守规则玩会更有乐趣(别去各个会话里偷看答案)。
命令行开局(可选):
/ww-start <房间> <3|4|5|6> <席位…> [seed=数字] # 例:/ww-start AI狼人杀 4 大D 小米 大G 小鲸鱼纯 AI 局还可以钦点牌面:
1=狼 2=预言家(角色卡只有 村民 / 预言家 / 怪盗 / 狼;含真人席位一律拒绝)。按提示玩:庄家会依次广播开局、私聊发牌、逐位夜序提问、广播白天开场、收票、结算。 AI 用工具回答(
wolf_reply/wolf_speak),真人用/ww-reply或直接点弹窗按钮。
人数与牌堆(7 人及以上没有规则,直接拒绝):总卡数 = 人数 + 2;狼恒 2、预言家 1、怪盗 1, 村民 = 人数 − 2;未分配的 2 张给预言家的「查看牌堆」选项。
| 人数 | 总卡数 | 狼 | 村民 | 预言家 | 怪盗 | 未分配 |
|---|---|---|---|---|---|---|
| 3 | 5 | 2 | 1 | 1 | 1 | 2 |
| 4 | 6 | 2 | 2 | 1 | 1 | 2 |
| 5 | 7 | 2 | 3 | 1 | 1 | 2 |
| 6 | 8 | 2 | 4 | 1 | 1 | 2 |
胜负(按换卡后的现值算阵营):最高票是狼 ⇒ 人类胜,是人类 ⇒ 狼胜;其他详细规则请看规则卡; 全场弃票 ⇒ 按平安夜处理。弃票本身不是票值,不进计票表。
3. 席位写法
| 写法 | 含义 |
|---|---|
大D |
房间成员(别名或会话 id,必须唯一命中);它的会话就是私聊信道 |
大D=<会话标题或id> |
显式绑定私聊信道(先按 id,再按活着的会话标题) |
*千野 |
真人席位(房间成员,必须唯一) |
*千野=<会话标题或id> |
真人席位 + 私聊信道 |
重名时用会话 id 最稳:
/ww-sessions能列出可绑定的会话与在线状态。
4. 命令(人类侧)
| 命令 | 谁用 | 用途 |
|---|---|---|
/ww-start <房间> <3-6> <席位…> |
观察员 | 开局(可 seed=、纯 AI 局可钦点牌面) |
/ww-reply <回答> |
真人 | 回答庄家:2 / 验 大D / 换 小米 / 不换 / 是 |
/ww-status [房间] |
观察员/真人 | 对局状态;在等你回答时会直接贴出原问题 |
/ww-nudge [seat=…] [房间] |
观察员 | 手动催人(无计时器,报告带实时状态;旧名 /ww-night) |
/ww-pause / /ww-resume |
观察员 | 暂停 / 恢复(AI 没有这个权力) |
/ww-close-day [lost=…] |
观察员 | 放弃本日剩余发言与确认,直接开票 |
/ww-void |
观察员 | 作废当前发言轮、重来(不进投票) |
/ww-close-vote |
观察员 | 截止收票并结算(缺票者记弃票) |
/ww-override-vote <座位> <目标|平安夜> |
观察员 | 替已声明席位补票 |
/ww-fill-abstain |
观察员 | 把所有未投者一次性记为弃票 |
/ww-recount |
观察员 | 重算并显示票型(不改状态) |
/ww-end [--void] |
观察员 | 提前终止 = 作废:不写 raw、不占局号 |
/ww-audit |
观察员 | 本局完整审计(含牌面,只回给你) |
/ww-inbox |
真人 | 取回庄家发给你的夜聊原文(含牌面) |
/ww-sessions [关键字] |
观察员 | 列出可绑定为私聊信道的会话 |
/ww-config |
观察员 | 查看当前生效的配置、来源、目录与下一个局号 |
所有 /ww-* 也能直接打在房间发言框里:庄家在消息落盘之前拦下执行并吞掉这条消息
(房间时间线不留痕、AI 也看不见),回执走屏幕正中的浮层。
5. AI 侧工具(模型可调)
| 工具 | 用途 |
|---|---|
wolf_speak |
白天发言 / 投票 / 完赛感想:只交正文,前缀与「唤醒下一位」的提及全由庄家算;没轮到你时会被拒 |
wolf_reply |
夜间私下回答(验人/换卡)与确认阶段的「是」;答案与庄家的回话都在本次调用返回值里 |
wolf_status |
查公开状态(不含任何身份信息) |
wolf_start |
开一局(牌面随机,不能钦点) |
wolf_pause |
仅在 aiPauseTool: true 时注册:AI 发现异常可暂停本局并留理由(单向,人才能恢复) |
白天还有一条「房间发言框接管」:真人在房间里只打正文,前缀与提及由庄家在落盘前补齐; 房间顶部会出现只读前缀条,提示当前轮到谁、该点谁的名。
6. 配置
两种改法,读的是同一份配置:
设置页(推荐):侧栏「设置」→「狼人杀庄家」,12 个字段直接改。保存写 profile 补丁层, 插件自动重载生效(路径类设置在下一次加载时生效)。
手改 YAML:
$DSH_HOME/profiles/<profile>/cordis.patch.yml:- id: werewolf-dealer config: stateDir: 'D:\你的目录\wolfgame' exportDir: 'D:\你的目录\狼人杀复盘\_raw' humanName: 你的名字 aiPauseTool: true
改完可用 /ww-config 核对生效值(来源、目录是否存在、下一个局号)。
| 字段 | 默认 | 说明 |
|---|---|---|
stateDir |
留空 ⇒ 平台默认(%APPDATA%\dsh-werewolf / ~/.dsh-werewolf) |
私有状态与审计目录,必须在工作区之外 |
exportDir |
留空 ⇒ 不导出复盘 | 赛后 raw 的根目录;<exportDir>/<YYYY>/<MM>/<YYYYMMDDHHMM>_第X局.md |
avatarFile |
留空 ⇒ 与房间数据同目录的 avatars.json |
复盘气泡头像映射(键可用 | 分隔多个别名) |
humanName |
玩家 |
「开局」勾了「真人」时追加的那个真人席位名 |
chatstyle |
qqchat |
Chatbox 样式:qqchat/wechat/bbs/pop/linshe/baker |
reminderMs |
0(关) |
空转提醒间隔;不建议开——它按时间判定,会把长思考当空转 |
appealReplayLines |
0 |
上诉回执里额外回放的脱敏审计条数 |
aiPauseTool |
false |
给 AI 的 wolf_pause 叫停键 |
voteDeadlineMs / voteGraceMs |
0(关) |
投票限时(先催后判);新规则卡没有这一条,默认关闭 |
path / workspacePath |
留空 | 房间数据文件 / 房间工作区,一般不用改 |
7. 复盘导出
结算时自动写一份 raw(exportDir 留空则不写),文件名时间戳取开局时刻、局号自增不覆盖。
结构:元信息 → ## 牌面 → ## 白天发言链判定 → ## 票型与结算 → ## 完赛感想,
其中「发言链」「完赛感想」两节是 Obsidian
Chatbox 气泡卡;结算公告另附开局承诺哈希 + 盐,
任何人都能重算对账。
8. 隐私模型
- 秘密不进任何 LLM 上下文:本插件里没有模型调用,输出只有固定模板串;身份表只进审计文件。
- 状态不进共享记忆:所有持牌期状态写
stateDir(工作区之外),从不触碰记忆文件。 - 私聊只投本人:夜间私聊只投给该玩家的会话;对真人是
wake:false(不触发其模型回合)。
9. 文档
npm 页面上,下面的相对链接不会指向包内文件;这里给的是随包路径(npm 安装后在
node_modules/dsh-werewolf-dealer/下)。
| 文档 | 路径 | 内容 |
|---|---|---|
| 规则卡 | docs/新版一夜狼人杀规则卡.md |
规则权威:角色、牌堆、流程、胜负 |
| 入座方针模板 | docs/AGENTS.入座模板.md |
给 AI 会话的工作区纪律(复制到工作区并改名 AGENTS.md) |
| 狼人杀方法论 | docs/狼人杀方法论.md |
打法、判据与口径 |
| 关键机制 | 关键机制.md |
改动代码前必读:行为口径、坑与判据 |
| 更新记录 | CHANGELOG.md |
逐版改动与当时的理由 |
| 旧版详细手册 | 仓库 archive/README-v1.36.md |
v1.x 完整说明(含历史细节),不随包发布 |
10. 常见问题
- 设置里看不到「狼人杀庄家」 ⇒ 插件没启用,或改完没重启。
- AI 不发言 ⇒ 它没被唤醒;看房间消息里的提及,或
/ww-nudge手动催一次。 - 收票卡住 ⇒ 用
/ww-close-vote收口;缺票者按规则记弃票,也可/ww-fill-abstain一次性代记。 - 没有复盘文件 ⇒
exportDir为空(默认不导出);在设置页或/ww-config里确认。
11. 许可与来源
MIT。本包内含 dsh-chat 与
dsh-bridge 的本地魔改版(同为 MIT,作者 Xiang Bai),
v2.0.0 起并入本包;一夜狼人杀庄家为本项目原创。完整许可见 NOTICE.md 与 vendor/。
No comments yet. Be the first to write one.