import os from dotenv import load_dotenv load_dotenv() TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN") ADMINPANEL_TELEGRAM_BOT_TOKEN = os.getenv("ADMINPANEL_TELEGRAM_BOT_TOKEN") # Lichess API Configuration LICHESS_API_BASE_URL = "https://lichess.org/api" LICHESS_STATS_API_BASE_URL = "http://localhost:8002" # Host port for stats API when bot runs with host networking # Пейсинг очереди запросов к НАШЕМУ ЖЕ локальному stats-сервису (LICHESS_STATS_API_BASE_URL). # Это НЕ защита от рейт-лимитера Lichess — та уже есть ниже по стеку, в # LichessWebServices/rate_limiter.py (0.2s, единственный process-wide инстанс, # применяется перед каждым реальным вызовом lichess.org, общий для всех клиентов # stats-сервиса). Эти числа можно свободно менять — они не увеличивают нагрузку на Lichess. LICHESS_REQUEST_QUEUE_MIN_DISPATCH_INTERVAL = 2.0 # сек между диспетчами запросов (жёсткий пол) LICHESS_REQUEST_QUEUE_MAX_CONCURRENT = 10 # макс. запросов к stats-сервису одновременно; 1 = откат к строго последовательному режиму # Джиттер чекпоинтов периодических проверок: не даёт парам (user, gamer) с одинаковым # period_minutes синхронизироваться на один и тот же wall-clock момент при рестарте бота # (см. periodic_check в bot.py). Потолок держим далеко ниже STALE_BACKLOG_THRESHOLD (2ч), # чтобы не задевать логику подавления уведомлений по устаревшему бэклогу. PERIODIC_CHECKPOINT_JITTER_FRACTION = 0.10 PERIODIC_CHECKPOINT_JITTER_MAX_SECONDS = 300 # Разброс старта периодических задач при запуске бота, чтобы не бить по SQLite # синхронно за один тик event loop при большом числе отслеживаемых игроков. PERIODIC_STARTUP_STAGGER_MAX_SECONDS = 30 # Database Configuration def _resolve_database_path() -> str: # 1) Explicit env var has highest priority db_from_env = os.getenv("DATABASE_PATH") if db_from_env: return db_from_env # 2) Docker default if volume is mounted docker_data_dir = "/app/data" if os.path.isdir(docker_data_dir): return os.path.join(docker_data_dir, "lichess_bot.db") # 3) Local development fallback (repo data dir) repo_data_dir = os.path.join(os.path.dirname(__file__), "data") os.makedirs(repo_data_dir, exist_ok=True) return os.path.join(repo_data_dir, "lichess_bot.db") DATABASE_PATH = _resolve_database_path() # Period options for /setperiod command PERIOD_OPTIONS = [0, 15, 30, 60, 120, 180, 360, 720, 1440] # minutes (0=disable, then: 15min, 30min, 1h, 2h, 3h, 6h, 12h, 24h) # Telegram Bot Long Polling Configuration POLL_INTERVAL = 1.0 # seconds POLL_TIMEOUT = 30 # seconds DROP_PENDING_UPDATES = True # Drop pending updates on startup ALLOWED_UPDATES = ["message", "callback_query"]