# werewolf-plugin **Repository Path**: lylnspace/werewolf-plugin ## Basic Information - **Project Name**: werewolf-plugin - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-15 - **Last Updated**: 2026-10-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # werewolf-plugin · 狼人杀 TRSS-Yunzai 群聊狼人杀裁判插件。机器人在群里当法官:发牌、推进昼夜、结算、复盘。 **身份与夜间行动走私聊**,白天发言与投票走群聊,群内绝不泄露玩家身份与夜间操作。 ## 安装 把 `werewolf-plugin` 目录放到 Yunzai 的 `plugins/` 下,重启即可(无第三方依赖,使用框架自带的 `redis`)。 ## 玩法流程 ``` #狼人杀 开房(默认目标 12 人) 加入狼人杀 / 开启狼人杀 开房(等价写法) #狼人杀N人 指定目标人数开房(N ≥ 4) #加入 / #退出 入座 / 退座 #开始 房主开局(人数 ≥ 4,未满员也可) ``` > 人数不确定时可以先开着:`#开始` 会**按实际到场人数自动重算板子**,4 人起即可开局,不必等满员。 开局后: - 身份、夜间行动私聊机器人; - 白天在群里自由发言,`#投 N` 放逐; - 房主 `#狼人杀结束` 可强制终止。 ## 指令一览 | 场景 | 指令 | 说明 | | --- | --- | --- | | 建房 | `#狼人杀` / `加入狼人杀` / `开启狼人杀` / `#狼人杀N人` | 默认目标 12 人,可选 7-12 预设板或任意人数自动配板 | | 建房(无民局) | `#狼人杀无民` / `#狼人杀无民N人` | 无平民板(狼神局),≥6 人,含白狼王、骑士,9 人起有丘比特 | | 入座 | `#加入` `#上桌` | 需可私聊(先私聊机器人一次) | | 退座 | `#退出` `#离桌` | 仅开局前 | | 开始 | `#开始` | 仅房主,人数需满 | | 夜间(私聊) | `#刀 N` | 狼人选择刀口(**需全体狼同意同一目标才锁定**) | | | (自由聊天) | 夜间狼人私聊非指令文本会**被机器人转发给其他存活狼**(带头像 / 昵称 / QQ) | | | `#验 N` | 预言家查验阵营 | | | `#救` / `#毒 N` / `#空` | 女巫用药 | | | `#守 N` | 守卫守护(不可连守同一人) | | | `#情侣 A B` | 丘比特首夜连情侣(可含自己) | | 白天 | `#开始投票` / `#结束发言` | **房主**手动进入投票阶段 | | 投票阶段 | `#投 N` / `#改票 N` / `#弃票` | 投票放逐(需房主已 `#开始投票`) | | 白天 | `#结算` / `#结束投票` | **房主**手动计票出结果 | | 白天 | `#自爆` | 狼人自爆:立刻出局并跳过投票,直接进入夜晚(仅剩一只狼时不可自爆) | | 白天 | `#决斗 N` | 骑士翻牌决斗(每局一次):是狼则出局直接入夜,不是狼则骑士殉道、白天继续 | | 猎人 | `#开枪 N` / `#空` | 被刀或被票出局时开枪(白狼王自爆后同样可开枪) | | 查询 | `#我的身份` / `#我的座位` / `#玩家列表` / `#规则` | 群内或私聊均可;`#玩家列表` 生成座位图 | | 帮助 | `#狼人杀帮助` / `#狼人杀菜单` / `帮助狼人杀` | 完整指令菜单 | | 复盘 | `#狼人杀战绩` | 个人胜率与身份分布 | | 终止 | `#狼人杀结束` | 房主或主人 | ## 板子 | 人数 | 阵容 | | --- | --- | | 7 | 狼×2、预言家、女巫、平民×3 | | 8 | 狼×2、预言家、女巫、猎人、平民×3 | | 9 | 狼×3、预言家、女巫、猎人、平民×3 | | 10 | 狼×3、预言家、女巫、猎人、平民×4 | | 11 | 狼×3、预言家、女巫、猎人、白痴、平民×4 | | 12 | 狼×4、预言家、女巫、猎人、白痴、平民×4 | **其他人数自动配板**:狼数 ≈ `round(人数/4)`(至少 1),神职按 预言家→女巫→猎人→白痴→守卫 的顺序启用,其余为平民。最低 **4 人** 开局。 ### 无民局板子(狼神局) `#狼人杀无民` / `#狼人杀无民N人` 开局,场上**没有平民**,加入特殊角色: - **白狼王**(狼阵营):平时与普通狼一致(夜里 #刀、可传话);白天 `#自爆` 时翻牌并可 `#开枪` 带走一人(`#空` 放弃)。 - **骑士**(好人):白天 `#决斗 N`(每局一次)——对方是狼则当场出局并直接入夜;不是狼则骑士殉道,**白天照常继续**(不进入夜晚)。 - **丘比特**(好人,9 人起):首夜 `#情侣 A B` 连两名玩家为情侣(可含自己);情侣互相殉情;阵营随情侣:**双好→好人、双狼→狼人、混搭→第三方**(情侣活到最后才胜)。丘比特阵营跟随情侣结果。 | 人数 | 无民阵容 | | --- | --- | | 6 | 狼×1、白狼王、预言家、女巫、猎人、骑士 | | 7 | 狼×1、白狼王、预言家、女巫、猎人、骑士、白痴 | | 8 | 狼×2、白狼王、预言家、女巫、猎人、骑士、守卫 | | 9 | 狼×2、白狼王、预言家、女巫、猎人、骑士、守卫、丘比特 | | 10 | 狼×2、白狼王、预言家、女巫、猎人、骑士、守卫、白痴、丘比特 | | 11 | 狼×3、白狼王、预言家、女巫、猎人、骑士、守卫、白痴、丘比特 | | 12 | 狼×3、白狼王、预言家、女巫、猎人、骑士、守卫、白痴×2、丘比特 | 其他人数:先用普通规则配板,再把平民按 丘比特→骑士→白狼王→白痴→守卫 的顺序逐个替换。无民局胜负:杀光所有神职即狼胜。 ## 结算规则 - **夜晚顺序**:守卫 → 女巫 → 猎人。 - **狼人**:狼队需**全体一致**刀同一目标才算决定/锁定;单个狼可随时改自己的刀,**可自刀**(含刀到自己/队友)。狼人夜间可私聊互相传话,机器人负责转发。**任一狼动手刀人时,机器人会私聊通知其他狼队友 "X号刀了Y号"(锁定后提示已锁)。** - **推进**:夜间**等所有行动角色完成**(狼队锁定 + 预言家验 + 女巫用药或 #空 + 守卫守)才进入白天,**不会到点直接跳**;未完成时每 60s 匿名提醒一次(不点名、不泄露身份)。 - **白天(手动)**:发言无时限;房主 `#开始投票` 进入投票,大家 `#投 N`,投完房主 `#结算`。**平票不随机出局**:平票者进入 **PK 加赛**,重新陈述并只能投平票者;**再平票则本轮无人出局**,进入夜晚。 - **狼人自爆**:白天(发言或投票阶段)狼人可 `#自爆`,立刻出局并**跳过本轮投票**直接进入夜晚;场上只剩一只狼时不可自爆。**白狼王自爆**翻牌后可私聊 `#开枪 N` 带走一人(或 `#空`),之后才进入夜晚。 - **骑士决斗**(无民局):白天骑士可 `#决斗 N`(每局一次)——目标是狼则当场出局直接入夜;不是狼则骑士殉道,白天继续。 - **丘比特情侣**:任一方出局,另一方立即殉情(殉情出局者不能开枪)。双好/双狼时情侣随大阵营;混搭为第三方,只有情侣两人活到最后才胜。丘比特本人阵营跟随情侣结算结果。 - **守卫**:守中狼刀目标则该目标免死;不可连续两晚守同一人。 - **女巫**:解药可救狼刀目标,毒药目标必死(守卫/解药都救不了毒);同一夜不可双开解药与毒药。**只有第一晚可以自救**,之后不能用药救自己。因夜晚异步进行,狼队锁刀后机器人会**私聊女巫告知今晚倒牌的人**(未锁刀前提示"刀口待定")。 - **同守同救**:同一目标同夜既被守卫守护又被女巫解救,则仍然死亡。 - **猎人**:被刀或被票出局可开枪带走一人;被毒出局不可开枪。**开枪不设时间限制**,等猎人 `#开枪 N` 或 `#空` 放弃后继续。 - **白痴**:被票出局翻牌不死,但失去投票权。 - **胜负**:狼杀光神职或杀光平民即狼胜;狼全灭则好人胜。 ## 技术说明 - 房间状态存 `redis`(键 `Yunzai:werewolf:room:<群号>`,6 小时过期),跨重启存活。 - **每群串行锁**:所有对同一房间的「读—改—写」都经 `RoomStore.update` 串行执行,杜绝并发 `#加入` 抢到同一座位 / 后写覆盖前写。 - **私聊非阻塞**:入座 / 发牌等私聊发送不 `await`,避免适配器发信慢拖住入座(响应更快)。 - 阶段性计时器存内存(模块级 `Map`,带 `unref` 与清理),随结算/结束回收。 - 一房一群一人:一个群同时只有一个房间,一名玩家同时只在一个房间。 - 私聊行动通过入座时写入的 `Yunzai:werewolf:user:room:` 映射反查所在群。 - **优先级 1000**:低于 earth-k-plugin 的 `^#玩(.*)`(priority 1145),避免 `#玩家列表` 被其抢占。若与其他插件指令冲突可再调低该值。 ## 时长 | 阶段 | 时长 | 说明 | | --- | --- | --- | | 夜晚 | 60s(提醒间隔) | **不靠时间推进**:等所有行动角色完成才进入白天;每 60s 匿名提醒一次还有谁没动 | | 白天发言 | 无 | **房主手动结束**:`#开始投票` 进入投票 | | 投票 | 无 | **房主手动结束**:`#结算` 计票;平票走 PK 加赛 | | 猎人开枪 | 无 | **不设时间限制**:等猎人 `#开枪 N` 或 `#空` 放弃后继续 | > 夜晚的"完成"= 狼队全员同意同一目标 + 预言家验过 + 女巫用药或 `#空` + 守卫守过(平民无操作)。全部满足立即进入白天,不受 60s 限制。