import os import logging from typing import Any from dotenv import load_dotenv logger = logging.getLogger(__name__) class Config: def __init__(self): self._config_data = self._load() logger.info("Конфигурация успешно загружена.") def _load_replies(self, file_path: str = "replies.txt"): try: reply_lines = [] with open(file_path, "r", encoding="utf-8") as replies: lines = replies.readlines() for line_index, line in enumerate(lines): if " || " in line: options = line.split(" || ") else: options = [line] reply_lines[line_index] = options except: return [["✓"]] def _load(self): load_dotenv() try: # Pyrogram api_id = int(os.getenv(key="API_ID", default=2040)) api_hash = os.getenv( key="API_HASH", default="b18441a1ff607e10a989891a5462e627" ) # Lolz lolz_token = os.getenv(key="LOLZ_TOKEN", defualt=None) lolz_thread_id = int(os.getenv(key="LOLZ_THREAD_ID", defualt=None)) # Stars stars_count = int(os.getenv(key="STARS_COUNT", defualt=1)) # Misc default_choice = int(os.getenv(key="DEFAULT_CHOICE", defualt=2)) start_page = max(int(os.getenv(key="START_PAGE", defualt=1)), 1) check_interval = max( float(os.getenv(key="CHECK_INTERVAL", defualt=30)), 0.2 ) # 300r/60s для GET запросов, 60/300 = минимум api_delay = max( float(os.getenv(key="API_DELAY", defualt=5)), 2 ) # 30r/60s для non-GET запросов, 60/30 = минимум max_retries = int(os.getenv(key="MAX_RETRIES", defualt=3)) enable_reply = ( os.getenv(key="ENABLE_REPLY", default="true") ).lower() == "true" skip_commented = ( os.getenv(key="SKIP_COMMENTED", default="true") ).lower() == "true" return { # Pyrogram "api_id": api_id, "api_hash": api_hash, # Lolz "lolz_token": lolz_token, "lolz_thread_id": lolz_thread_id, # Stars "stars_count": stars_count, # Misc "default_choice": default_choice, "start_page": start_page, "check_interval": check_interval, "api_delay": api_delay, "max_retries": max_retries, "enable_reply": enable_reply, "skip_commented": skip_commented, "reply_templates": self._load_replies(), } except: raise def __getattr__(self, name: str) -> Any: return self._config_data.get( name, True if name == "skip_posts_with_comments" else None )