Skip to content

LZEric/game-script-union

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

游戏每日任务自动执行调度器

一个用于定时启动多个游戏自动化程序、完成每日任务后自动关闭程序的 Python 调度器。支持配置化管理、高度可扩展,方便添加新的自动化程序。

📁 项目目录结构

game_script/
├── src/                  # 源代码目录
│   ├── __init__.py       # 包初始化文件,导出所有公共类和函数
│   ├── config.py         # 配置管理模块(配置数据类和配置管理器)
│   ├── executors.py      # 程序执行器模块(执行器基类和具体实现)
│   ├── scheduler.py      # 任务调度器模块(定时调度逻辑)
│   ├── logger.py         # 日志模块(日志记录功能)
│   └── main.py           # 主程序入口(程序启动入口)
├── config.json           # 配置文件(运行时使用的配置)
├── requirements.txt      # Python 依赖包列表
├── run.py                # 启动脚本(推荐使用)
├── README.md             # 项目说明文档(本文件)
└── logs/                 # 日志文件目录(运行时自动生成)
    └── scheduler_YYYYMMDD_HHMMSS.log

📦 模块说明

1. config.py - 配置管理模块

功能:管理所有配置信息,支持从 JSON 文件加载和保存配置

核心类

  • ProgramConfig - 程序配置数据类,定义单个程序的配置项
  • SchedulerConfig - 调度器配置数据类,定义调度器的全局配置
  • ConfigManager - 配置管理器,负责配置的加载、保存和管理

2. executors.py - 程序执行器模块

功能:实现游戏自动化程序的启动、监控和关闭

核心类

  • GameTaskExecutor - 抽象基类,定义执行器的标准接口
  • BetterGIExecutor - BetterGI 专用执行器
  • March7Executor - 三月七专用执行器
  • ZZZExecutor - 绝区零专用执行器
  • ExecutorFactory - 执行器工厂类,负责创建执行器实例

3. scheduler.py - 任务调度器模块

功能:定时执行所有配置的任务

核心类

  • TaskScheduler - 任务调度器,支持定时模式和循环模式

4. logger.py - 日志模块

功能:记录程序运行日志,支持控制台和文件输出

核心类

  • Logger - 简易日志记录器

5. main.py - 主程序入口

功能:程序的入口点,整合所有模块

核心函数

  • create_default_config() - 创建默认配置
  • main() - 主函数,启动调度器

🚀 快速开始

环境要求

  • Python 3.11+
  • Windows 操作系统

1. 安装依赖

pip install -r requirements.txt

2. 配置程序

编辑 config.json,修改以下关键配置:

{
  "scheduler": {
    "scheduled_times": ["00:00", "12:00", "20:00"],  // 定时执行时间
    "loop_mode": false,                               // 是否循环模式
    "loop_interval": 3600,                           // 循环间隔(秒)
    "log_enabled": true,                             // 是否启用日志
    "log_dir": "./logs"                              // 日志目录
  },
  "programs": [
    {
      "name": "bettergi",
      "display_name": "BetterGI",
      "executable_path": "D:\\Games\\BetterGI\\BetterGI.exe",  // 修改为实际路径
      "arguments": ["--auto"],                                  // 启动参数
      "process_names": ["BetterGI.exe", "BetterGI"],           // 进程名
      "timeout": 0,                                             // 超时时间(0=不限制)
      "enabled": true,                                          // 是否启用
      "delay_before_start": 0,                                  // 启动前延迟
      "delay_after_start": 5                                    // 启动后延迟
    }
    // ... 其他程序配置
  ]
}

3. 运行程序

方式一:使用启动脚本(推荐)

python run.py

方式二:立即执行一次所有任务

python run.py --run-now

方式三:直接运行主程序(需要先切换到src目录)

cd src
python main.py

4. 停止程序

Ctrl+C 即可停止调度器

⚙️ 配置说明

调度器配置 (scheduler)

参数 类型 说明 示例
scheduled_times string[] 定时执行时间列表(24 小时制,格式:HH:MM) ["00:00", "12:00", "20:00"]
loop_mode boolean 是否启用循环模式 false
loop_interval integer 循环执行间隔(秒),仅在 loop_mode=true 时有效 3600
log_enabled boolean 是否启用日志记录 true
log_dir string 日志文件存储目录 "./logs"
close_timeout integer 关闭程序时的超时时间(秒) 10

程序配置 (programs)

参数 类型 说明 必填
name string 程序唯一标识(小写英文)
display_name string 程序显示名称(中文)
executable_path string 程序可执行文件完整路径
arguments string[] 启动参数列表
process_names string[] 进程名称列表(用于检测和关闭)
timeout integer 执行超时时间(秒,0=不限制)
enabled boolean 是否启用该程序
delay_before_start integer 启动前延迟时间(秒)
delay_after_start integer 启动后延迟时间(秒)

🔧 扩展开发

添加新的自动化程序

步骤 1:创建新的执行器类

executors.py 中添加:

class NewGameExecutor(GameTaskExecutor):
    """新游戏任务执行器"""
    
    def get_name(self) -> str:
        """获取执行器名称"""
        return "新游戏"

步骤 2:在工厂类中注册

ExecutorFactory.DEFAULT_EXECUTORS 中添加:

DEFAULT_EXECUTORS = {
    'bettergi': BetterGIExecutor,
    'march7': March7Executor,
    'zzz': ZZZExecutor,
    'newgame': NewGameExecutor,  # 添加新的执行器
}

步骤 3:在配置文件中添加配置

config.jsonprograms 数组中添加:

{
  "name": "newgame",
  "display_name": "新游戏",
  "executable_path": "D:\\Games\\NewGame\\NewGame.exe",
  "arguments": ["--daily-task"],
  "process_names": ["NewGame.exe"],
  "enabled": true
}

自定义执行器高级功能

如果需要更复杂的执行逻辑,可以重写基类的方法:

class CustomExecutor(GameTaskExecutor):
    def start(self) -> bool:
        # 自定义启动逻辑
        return super().start()
    
    def wait_for_completion(self) -> bool:
        # 自定义等待逻辑
        return super().wait_for_completion()
    
    def close(self) -> bool:
        # 自定义关闭逻辑
        return super().close()

📊 代码概要设计

架构模式

  • 工厂模式ExecutorFactory 负责创建执行器实例
  • 策略模式:不同的执行器实现不同的策略
  • 配置驱动:所有行为由配置文件控制

执行流程

程序启动
    ↓
加载配置文件 (config.json)
    ↓
创建配置管理器 (ConfigManager)
    ↓
创建日志记录器 (Logger)
    ↓
创建任务调度器 (TaskScheduler)
    ↓
┌───────────────────────┐
│   等待到预定时间       │
└───────────┬───────────┘
            ↓
┌───────────────────────┐
│   执行所有任务         │
│   ┌───────────────┐   │
│   │ 遍历程序列表   │   │
│   └───────┬───────┘   │
│           ↓           │
│   ┌───────────────┐   │
│   │ 创建执行器     │   │
│   └───────┬───────┘   │
│           ↓           │
│   ┌───────────────┐   │
│   │ 启动程序       │   │
│   └───────┬───────┘   │
│           ↓           │
│   ┌───────────────┐   │
│   │ 等待完成       │   │
│   └───────┬───────┘   │
│           ↓           │
│   ┌───────────────┐   │
│   │ 关闭程序       │   │
│   └───────────────┘   │
└───────────┬───────────┘
            ↓
    等待到下次执行时间
            ↓
        (循环)

类关系图

┌─────────────────────────┐
│   ConfigManager         │
│  - scheduler_config     │
│  - program_configs      │
└───────────┬─────────────┘
            │
            │ 使用
            ↓
┌─────────────────────────┐
│   TaskScheduler         │
│  - config_manager       │
│  - executor_factory     │
└───────────┬─────────────┘
            │
            │ 使用
            ↓
┌─────────────────────────┐
│   ExecutorFactory       │
│  - executor_map         │
└───────────┬─────────────┘
            │
            │ 创建
            ↓
┌─────────────────────────┐
│   GameTaskExecutor      │◁────────────┐
│  - config               │             │
│  - process              │             │
└───────────┬─────────────┘             │
            │                           │
            │ 继承                      │ 继承
    ┌───────┼───────┬───────────┐       │
    ↓       ↓       ↓           ↓       │
BetterGI March7  ZZZ      Custom       │
Executor Executor Executor  Executor ───┘

📝 日志说明

程序会在 logs/ 目录下生成日志文件,文件名格式:scheduler_YYYYMMDD_HHMMSS.log

日志内容示例:

日志开始时间:2026-03-19 13:03:23
================================================================================
[2026-03-19 13:03:23] 调度器启动
[2026-03-19 13:03:25] [BetterGI] 启动程序:D:\Games\BetterGI\BetterGI.exe
[2026-03-19 13:03:30] [BetterGI] 程序启动成功
[2026-03-19 13:05:00] [BetterGI] 程序执行完成
[2026-03-19 13:05:01] [BetterGI] 程序已正常关闭
[2026-03-19 13:05:03] 调度器停止

❓ 常见问题

Q: 程序找不到可执行文件?

A: 检查 config.json 中的 executable_path 是否配置正确,确保路径使用双反斜杠 \\ 或正斜杠 /

Q: 如何添加更多定时时间?

A: 在 config.jsonscheduled_times 数组中添加时间,例如:["00:00", "12:00", "20:00"]

Q: 如何临时禁用某个程序?

A: 将该程序的 enabled 配置改为 false,无需删除配置。

Q: 循环模式和定时模式有什么区别?

A:

  • 定时模式:在指定的时间点执行(如每天 9:00、20:00)
  • 循环模式:每隔固定时间间隔执行一次(如每隔 1 小时)

Q: 如何查看日志?

A: 日志文件保存在 logs/ 目录下,使用文本编辑器即可查看。

📄 许可证

本项目仅供学习和个人使用。

🤝 贡献

如需添加新功能或修复 bug,请遵循以下步骤:

  1. Fork 项目
  2. 创建功能分支
  3. 提交更改
  4. 推送到分支
  5. 创建 Pull Request

📧 联系方式

如有问题或建议,请通过以下方式联系:

  • 提交 Issue
  • 发送邮件至开发者邮箱

最后更新时间:2026-03-19

About

整合游戏自动化工具启动器

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages