Files
NewWPSBot/.tasks/2025-11-06_1_migrate-game-bot.md
2025-11-08 15:05:48 +08:00

3.4 KiB
Raw Blame History

背景

文件名: 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 确保写入串行, 保存失败会记录错误日志。

当前执行步骤:"3. 实施配置插件"

任务进度

最终审查

[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相关的最优先表被注册在此处