Files
NewWPSBot/.past_tasks/2025-11-03_2_werewolf-game.md
2025-11-06 16:26:07 +08:00

7.7 KiB
Raw Blame History

背景

文件名2025-11-03_2_werewolf-game.md 创建于2025-11-03_12:20:10 创建者admin 主分支main 任务分支task/werewolf_2025-11-03_1 Yolo模式Off

任务描述

在WPS Bot Game项目中添加狼人杀游戏系统支持6-12人游戏包含身份分配、私聊功能、技能使用等核心功能。

核心需求

  1. 支持6-12人狼人杀游戏配置2-4狼 1预言家 1女巫 2-6平民
  2. 主持人开房:.狼人杀 open
  3. 玩家加入:.狼人杀 join必须注册用户名和个人URL
  4. 开始游戏:.狼人杀 start,自动分配身份并通过私聊发送
  5. 私聊功能:.狼人杀 <玩家代号> <消息>
  6. 狼人群聊:.狼人杀 狼人 <消息>
  7. 技能系统:杀、验、救、毒
  8. 游戏状态查询:.狼人杀 status
  9. 结束游戏:.狼人杀 end

游戏规则

人数配置

  • 6人2狼 1预言家 1女巫 2平民
  • 8人2狼 1预言家 1女巫 4平民
  • 10人3狼 1预言家 1女巫 5平民
  • 12人4狼 1预言家 1女巫 6平民

胜利条件

  • 狼人阵营:杀死所有神职和平民
  • 好人阵营:消灭所有狼人

技能

  • 狼人:每晚投票刀人
  • 预言家:每晚查验一个玩家身份
  • 女巫:拥有一瓶解药(仅可使用一次)和一瓶毒药(仅可使用一次)
  • 平民:无特殊技能

项目概览

项目结构

WPSBotGame/
├── app.py                    # FastAPI主应用
├── config.py                 # 配置管理
├── core/
│   ├── database.py          # SQLite数据库操作
│   ├── middleware.py        # 中间件
│   └── models.py            # 数据模型
├── routers/
│   ├── callback.py          # Callback路由处理
│   ├── health.py            # 健康检查
│   └── private.py           # 私聊相关API
├── games/                   # 游戏模块
│   ├── werewolf.py          # 狼人杀游戏(新增)
│   └── ...                 # 其他游戏
└── utils/
    ├── parser.py           # 指令解析
    └── message.py          # 消息发送

分析

当前状态

  1. 已有私聊功能支持用户可注册个人webhook URL
  2. 已有游戏架构BaseGame基类、数据库状态管理
  3. 已有成语接龙等多人类游戏参考
  4. 数据库支持game_states表存储游戏状态

关键技术点

  1. 数据库层:

    • 使用game_states表存储游戏状态user_id=0表示群级别状态
    • 通过state_data JSON字段存储玩家列表、身份、阶段等信息
  2. 私聊系统:

    • 利用现有的send_private_message函数
    • 身份信息、技能结果等通过私聊发送
    • 支持发送者标识显示
  3. 游戏状态管理:

    • 游戏状态存储在state_data中
    • 包含:玩家列表、身份映射、狼人列表、技能使用记录等
  4. 技能系统:

    • 狼人刀人:投票机制
    • 预言家验人:私聊返回结果
    • 女巫用药:限制使用次数
  5. 指令路由:

    • 在parser.py注册.werewolf和.狼人杀指令
    • 在callback.py中导入并注册游戏处理器

提议的解决方案

方案概述

  1. 创建狼人杀游戏类games/werewolf.py继承BaseGame
  2. 状态数据结构使用JSON存储在state_data中
  3. 身份分配:随机分配角色,狼人互相认识
  4. 私聊通知:游戏开始时通过私聊发送身份信息
  5. 技能系统:支持杀、验、救、毒四种技能
  6. 指令注册:添加解析和路由支持

设计决策

  • 使用user_id=0存储群级别游戏状态参考成语接龙
  • 通过私聊发送敏感信息(身份、技能结果)
  • 简化实现:主持人手动推进阶段(暂不实现自动流转)
  • 使用数字代号1-N标识玩家
  • 支持狼人群聊功能

当前执行步骤:"实施完成"

详细实施计划

文件1: games/werewolf.py新建文件

主要方法

  1. handle() - 主处理逻辑,指令路由
  2. get_help() - 帮助信息
  3. _open_game() - 主持人开房
  4. _join_game() - 玩家加入
  5. _start_game() - 开始游戏,分配身份
  6. _send_identities() - 私聊发送身份信息
  7. _private_chat() - 玩家私聊
  8. _wolf_group_chat() - 狼人群聊
  9. _handle_skill() - 技能处理
  10. _wolf_kill() - 狼人刀人
  11. _seer_check() - 预言家验人
  12. _witch_save() - 女巫救人
  13. _witch_poison() - 女巫毒人
  14. _show_status() - 显示游戏状态
  15. _end_game() - 结束游戏

数据结构设计

state_data = {
    'creator_id': int,  # 主持人ID
    'status': str,  # 'open', 'playing', 'finished'
    'players': [
        {
            'user_id': int,
            'name': str,  # 注册的用户名
            'id': int,  # 游戏内代号 1-N
            'role': str,  # 'wolf', 'seer', 'witch', 'civilian'
            'alive': bool,
            'id_label': str  # "1号玩家"
        }
    ],
    'phase': str,  # 当前阶段
    'round': int,  # 当前回合数
    'wolves': [int],  # 狼人ID列表
    'kill_target': int,  # 狼人票决目标
    'seer_result': {},  # 预言家验人结果
    'witch_save': bool,  # 女巫是否救人
    'witch_poison': int,  # 女巫毒杀目标
    'discussed': False,  # 讨论阶段是否完成
    'wolf_know_each_other': False
}

文件2: utils/parser.py

修改点:添加指令映射

在COMMAND_MAP中添加

'.werewolf': 'werewolf',
'.狼人杀': 'werewolf',

文件3: routers/callback.py

修改点:添加路由处理

在handle_command函数中添加

# 狼人杀系统
if game_type == 'werewolf':
    from games.werewolf import WerewolfGame
    game = WerewolfGame()
    return await game.handle(command, chat_id, user_id)

文件4: games/base.py

修改点:添加帮助信息

在get_help_message()函数中添加狼人杀帮助说明

任务进度

[2025-11-03_12:20:10]

  • 已修改:

    1. games/werewolf.py - 新建狼人杀游戏类,实现所有核心功能
    2. utils/parser.py - 添加.werewolf和.狼人杀指令映射
    3. routers/callback.py - 添加狼人杀路由处理
    4. games/base.py - 添加狼人杀帮助信息
  • 更改:

    1. 创建完整的狼人杀游戏系统
    2. 支持开房、加入、开始、私聊、技能使用等所有核心功能
    3. 实现6-12人游戏配置和角色分配
    4. 集成私聊系统发送身份信息
    5. 支持狼人群聊功能
    6. 添加帮助信息和指令注册
  • 原因: 实现完整的狼人杀游戏系统,支持多人游戏、身份隐藏、技能使用等核心功能

  • 阻碍因素: 无

  • 状态:成功

[2025-11-04_17:41:14]

  • 已修改:

    1. games/werewolf.py - 改进阶段提示和自动流转功能
  • 更改:

    1. 添加阶段名称映射系统phase_configs定义各阶段的中文名称、行动角色和指令说明
    2. 实现阶段管理方法_get_phase_description()、_get_next_phase()、_advance_phase()
    3. 改进游戏开始提示,明确显示"第一夜 - 狼人行动阶段"和操作指令
    4. 实现自动阶段流转:狼人刀人后自动进入预言家阶段,预言家验人后自动进入女巫阶段
    5. 新增女巫跳过功能:支持.werewolf 跳过指令,女巫可以选择不行动
    6. 改进状态显示_show_status()现在显示中文阶段名称、当前行动角色和操作指令
    7. 更新身份说明和帮助信息,添加女巫跳过选项说明
    8. 各技能方法添加阶段验证,确保在正确的阶段使用技能
  • 原因: 解决用户反馈的游戏阶段不明显的问题,让玩家清楚知道当前是什么阶段、谁应该行动、下一步是什么阶段

  • 阻碍因素: 无

  • 状态:成功

最终审查

待审查阶段完成...