"""Конфигурация из переменных окружения.""" import os from pathlib import Path from dotenv import load_dotenv load_dotenv(Path(__file__).resolve().parent / ".env") # Gitea GITEA_URL = os.getenv("GITEA_URL", "").rstrip("/") GITEA_TOKEN = os.getenv("GITEA_TOKEN") or os.getenv("TOKEN") REPO_OWNER = os.getenv("REPO_OWNER", "") REPO_NAME = os.getenv("REPO_NAME", "") # LLM (Ollama / OpenAI-compatible) OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", "ollama") OPENAI_BASE_URL = os.getenv("OPENAI_BASE_URL", "") OPENAI_MODEL = os.getenv("OPENAI_MODEL", "qwen3") # Telegram TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN", "") TELEGRAM_TO_GITEA_USERNAME = os.getenv("TELEGRAM_TO_GITEA_USERNAME", "") # Whisper (голосовые) WHISPER_MODEL = os.getenv("WHISPER_MODEL", "small") def validate() -> None: """Проверка обязательных переменных при старте.""" missing = [] if not GITEA_URL: missing.append("GITEA_URL") if not GITEA_TOKEN: missing.append("GITEA_TOKEN") if not REPO_OWNER: missing.append("REPO_OWNER") if not REPO_NAME: missing.append("REPO_NAME") if not TELEGRAM_BOT_TOKEN: missing.append("TELEGRAM_BOT_TOKEN") if missing: raise RuntimeError(f"Не заданы: {', '.join(missing)}. Проверьте .env") def get_gitea_username(telegram_username: str | None, telegram_id: int | None) -> str: """Gitea username для текущего пользователя Telegram (для «на меня»).""" if TELEGRAM_TO_GITEA_USERNAME: # Один username для всех или JSON — пока только одна строка try: import json m = json.loads(TELEGRAM_TO_GITEA_USERNAME) if isinstance(m, dict) and telegram_username and telegram_username in m: return m[telegram_username] if isinstance(m, dict) and telegram_id is not None and str(telegram_id) in m: return m[str(telegram_id)] except (json.JSONDecodeError, TypeError): pass return TELEGRAM_TO_GITEA_USERNAME return telegram_username or ""