Files
NewWPSBot/.tasks/2025-11-06_1_migrate-game-bot.md

79 lines
3.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 背景
文件名: 2025-11-06_1_migrate-game-bot.md
创建于: 2025-11-06_12-04-52
创建者: desktop-l305h65\admin
主分支: main
任务分支: 未创建
Yolo模式: Off
# 任务描述
当前项目是另一个游戏bot项目重构后的新版本, 阅读并理解@.past_tasks 中过去做的一些内容, 将这些游戏功能移植到当前项目中, 采用目前的插件实现方法
# 项目概览
现有代码库采用插件机制, 插件通过 PluginInterface 注册指令与数据库表, 核心路由通过 PluginInterface.plugin_instances 进行分发。当前仅存在基础的 WPSAPI 插件, 还未落地任何游戏相关逻辑, 数据库初始化阶段只建立了 users 表。
# 分析
## 旧项目依赖梳理
1. 底层依赖: 数据库结构 (users, game_states, game_stats 等) 与消息发送封装 (主 webhook + 个人 webhook), 这些为所有游戏与积分系统提供状态与通信能力。
2. 通用支撑: 用户注册/更新、私聊 webhook 注册、积分增减、统计记录、命令解析器、游戏基类、冒险-炼金互斥逻辑。多数复杂游戏 (狼人杀、冒险、赌场等) 直接使用这些功能。
3. 业务层: 各类游戏模块 (成语接龙、五子棋、狼人杀、冒险、炼金、赌场等)。其中狼人杀和赌场高度依赖个人 webhook 与积分系统, 冒险和炼金存在互锁关系。
## 新架构观察
1. PluginInterface 提供 register_db_model 钩子以声明数据表结构, 插件成功加载后自动创建所需列, 适合将旧项目的各类状态表拆分到对应插件内。
2. 当前数据库仅含 users 表 (user_id, username, created_at, last_active), 尚无积分、个人 URL 或游戏状态字段, 需首先扩展基础个人信息结构。
3. 由于回调路由直接依赖指令注册, 任何基础功能 (例如注册用户名或 URL) 也需要以插件形式提供命令入口或 API。
# 提议的解决方案## 配置插件阶段方案
- 新增 ConfigPlugin, 利用 EasySave 将用户配置持久化到 Assets/user_configs.easysave, 支持最多百人规模。
- 以 chat_id + user_id 为键缓存配置, 提供 user.name / user.url / user.point 字段并维护积分历史。
- 指令入口不再使用句点, 解析 `config set/get/adjust` 递归子命令, 支持别名 cfg。
- 暴露 get_user_name/url/points 与 adjust_user_points 接口供其他插件调用。
- 通过 asyncio.Lock 确保写入串行, 保存失败会记录错误日志。
# 当前执行步骤:"4. 修复签到唯一约束"
# 任务进度
# 最终审查
[2025-11-06_15:04:03]
- 已修改Plugins/ConfigPlugin.py
- 更改:创建配置插件,落地 config 指令并通过 EasySave 持久化用户资料与积分
- 原因提供用户名、个人URL及积分的统一管理入口
- 阻碍因素:无
- 状态:未确认
[2025-11-07_手动更新]
- 已修改: Plugins/ConfigPlugin.py->Plugins/WPSDailyAPI
- 更改: 放弃ES, 重新转向数据库持久化
- 原因: 统一接口并实时读写
- 阻碍因素: 无
- 状态: 成功
[2025-11-07_22:11:00]
- 已修改: Plugins/WPSDailyAPI
- 更改: 完成签到功能与对应的提示功能
- 阻碍因素: 无
- 状态: 成功
[2025-11-07_22:33:00]
- 已修改: Plugins/WPSDailyAPI->Plugins/WPSPointSystem
- 更改: 更改Daily类名为Checkin
- 原因: 原Daily类提供的功能不足以使用Daily的名称
- 阻碍因素: 无
- 状态: 成功
[2025-11-07_22:33:00]
- 已修改: Plugins/WPSPointSystem->Plugins/WPSConfigSystem
- 原因: user_id相关的最优先表被注册在此处
- 阻碍因素: 无
- 状态: 成功
[2025-11-09_19:35:08]
- 已修改: `Plugins/WPSConfigSystem.py`
- 更改: 在记录每日签到时使用 INSERT ... ON CONFLICT(user_id) DO UPDATE避免跨日签到触发唯一约束错误
- 原因: 保障每日签到功能在重复执行时保持幂等性
- 阻碍因素: 无
- 状态: 成功