from pathlib import Path import json import os from dotenv import load_dotenv # Load environment variables from .env file (if it exists) load_dotenv() def load_from_json(): #Load config from JSON file if it exists path = Path("data/config.json") if not path.exists(): return {} try: with open(path, "r", encoding="utf-8") as f: data = json.load(f) return data.get("config", {}) except Exception as e: print(f"Error loading config from JSON: {e}") return {} # Load from JSON or use defaults _config = load_from_json() # Helper function to get config value from environment, then JSON, then default def get_config(key: str, default, is_int: bool = False): # 1. Try environment variable first env_val = os.getenv(key) if env_val is not None: return int(env_val) if is_int else env_val # 2. Try JSON config json_val = _config.get(key) if json_val is not None: return json_val # 3. Use default return default # Torn API TORN_API_KEY = get_config("TORN_API_KEY", "YOUR_TORN_API_KEY_HERE") # FFScouter API FFSCOUTER_KEY = get_config("FFSCOUTER_KEY", "YOUR_FFSCOUTER_KEY_HERE") # Discord Bot DISCORD_TOKEN = get_config("DISCORD_TOKEN", "YOUR_DISCORD_BOT_TOKEN_HERE") ALLOWED_CHANNEL_ID = get_config("ALLOWED_CHANNEL_ID", 0, is_int=True) # Intervals HIT_CHECK_INTERVAL = get_config("HIT_CHECK_INTERVAL", 60, is_int=True) REASSIGN_DELAY = get_config("REASSIGN_DELAY", 120, is_int=True) # Bot Assignment Settings ASSIGNMENT_TIMEOUT = get_config("ASSIGNMENT_TIMEOUT", 60, is_int=True) # Seconds before reassigning a target ASSIGNMENT_REMINDER = get_config("ASSIGNMENT_REMINDER", 45, is_int=True) # Seconds before sending reminder message # Chain Timer Settings CHAIN_TIMER_THRESHOLD = get_config("CHAIN_TIMER_THRESHOLD", 5, is_int=True) # Minutes - start assigning hits when chain timer is at or below this # Authentication AUTH_PASSWORD = get_config("AUTH_PASSWORD", "YOUR_AUTH_PASSWORD_HERE") # Universal password for all users JWT_SECRET = get_config("JWT_SECRET", "your-secret-key-change-this") # Secret key for JWT tokens