79 lines
3.8 KiB
Markdown
79 lines
3.8 KiB
Markdown
# 背景
|
||
文件名: 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,避免跨日签到触发唯一约束错误
|
||
- 原因: 保障每日签到功能在重复执行时保持幂等性
|
||
- 阻碍因素: 无
|
||
- 状态: 成功 |