Files
2026-06-13 20:20:56 +00:00

61 lines
1.6 KiB
Python

from __future__ import annotations
import os
from dataclasses import dataclass
from pathlib import Path
def _parse_allowed_ids(raw: str) -> frozenset[int]:
ids: set[int] = set()
for part in raw.split(","):
part = part.strip()
if not part:
continue
try:
ids.add(int(part))
except ValueError:
continue
return frozenset(ids)
@dataclass(frozen=True)
class Settings:
telegram_bot_token: str
ha_api_base_url: str
poll_interval_sec: int
data_dir: Path
allowed_telegram_ids: frozenset[int]
@property
def db_path(self) -> Path:
return self.data_dir / "bot.db"
def load_settings() -> Settings:
token = os.getenv("TELEGRAM_BOT_TOKEN", "").strip()
if not token:
raise RuntimeError("TELEGRAM_BOT_TOKEN is required")
base_url = os.getenv("HA_API_BASE_URL", "").strip().rstrip("/")
if not base_url:
raise RuntimeError("HA_API_BASE_URL is required")
poll_raw = os.getenv("POLL_INTERVAL_SEC", "30").strip()
try:
poll_interval = max(10, int(poll_raw))
except ValueError:
poll_interval = 30
data_dir = Path(os.getenv("DATA_DIR", "./data")).resolve()
data_dir.mkdir(parents=True, exist_ok=True)
allowed = _parse_allowed_ids(os.getenv("ALLOWED_TELEGRAM_IDS", ""))
return Settings(
telegram_bot_token=token,
ha_api_base_url=base_url,
poll_interval_sec=poll_interval,
data_dir=data_dir,
allowed_telegram_ids=allowed,
)