Spaces:
Sleeping
Sleeping
| import os | |
| import sys | |
| import time | |
| import subprocess | |
| import threading | |
| import yaml | |
| from fastapi import FastAPI | |
| app = FastAPI() | |
| def run_lichess_bot(): | |
| token = os.environ.get("LICHESS_TOKEN") | |
| if not token: | |
| print("[Error] 未找到 LICHESS_TOKEN 环境变量,Bot 无法启动!", file=sys.stderr) | |
| return | |
| bot_dir = "/app/lichess-bot" | |
| config_path = os.path.join(bot_dir, "config.yml") | |
| # 生成 lichess-bot 配置文件 | |
| config_data = { | |
| "token": token, | |
| "url": "https://lichess.org/", | |
| "engine": { | |
| "dir": "/app", | |
| "name": "engine.py", | |
| "protocol": "uci" | |
| }, | |
| "challenge": { | |
| "min_increment": 0, | |
| "max_increment": 180, | |
| "min_initial": 60, | |
| "max_initial": 3600, | |
| "time_controls": ["bullet", "blitz", "rapid", "classical"], | |
| "modes": ["casual", "rated"], | |
| "variants": ["standard"], | |
| "accept_bot": True | |
| }, | |
| "matchmaking": { | |
| "allow_matchmaking": True, | |
| "allow_during_games": False, | |
| "challenge_timeout": 30, | |
| "challenge_variant": "standard", | |
| "challenge_initial_time": [60,120,180,300,600,900,1800], | |
| "challenge_increment": [0,1,2,3,4,5], | |
| "challenge_mode": "rated", | |
| "challenge_filter": "fine" | |
| } | |
| } | |
| with open(config_path, "w") as f: | |
| yaml.dump(config_data, f) | |
| print("[App] 正在启动 lichess-bot 主程序...", file=sys.stderr) | |
| # 在后台持续运行 lichess-bot | |
| subprocess.run(["python3", "lichess-bot.py"], cwd=bot_dir) | |
| # 在独立线程中启动 Bot,防止阻塞 FastAPI Web 服务 | |
| def startup_event(): | |
| thread = threading.Thread(target=run_lichess_bot, daemon=True) | |
| thread.start() | |
| def health_check(): | |
| return {"status": "running", "bot": "ChessQween3-base"} |