52 lines
1.4 KiB
Python
52 lines
1.4 KiB
Python
import os
|
|
from dataclasses import dataclass
|
|
|
|
from dotenv import load_dotenv
|
|
|
|
|
|
@dataclass
|
|
class Settings:
|
|
telegram_bot_token: str
|
|
telegram_chat_id: int
|
|
minecraft_host: str
|
|
minecraft_port: int
|
|
poll_interval_seconds: int
|
|
status_file_path: str
|
|
|
|
|
|
def load_settings() -> Settings:
|
|
load_dotenv()
|
|
|
|
token = os.getenv("TELEGRAM_BOT_TOKEN")
|
|
chat_id = os.getenv("TELEGRAM_CHAT_ID")
|
|
host = os.getenv("MINECRAFT_HOST")
|
|
port = os.getenv("MINECRAFT_PORT", "25565")
|
|
interval = os.getenv("POLL_INTERVAL_SECONDS", "30")
|
|
status_file_path = os.getenv("STATUS_FILE_PATH", "data/status.json")
|
|
|
|
if not token:
|
|
raise RuntimeError("TELEGRAM_BOT_TOKEN is required")
|
|
if not chat_id:
|
|
raise RuntimeError("TELEGRAM_CHAT_ID is required")
|
|
if not host:
|
|
raise RuntimeError("MINECRAFT_HOST is required")
|
|
|
|
try:
|
|
parsed_port = int(port)
|
|
except ValueError as exc:
|
|
raise RuntimeError("MINECRAFT_PORT must be an integer") from exc
|
|
|
|
try:
|
|
parsed_interval = int(interval)
|
|
except ValueError as exc:
|
|
raise RuntimeError("POLL_INTERVAL_SECONDS must be an integer") from exc
|
|
|
|
return Settings(
|
|
telegram_bot_token=token,
|
|
telegram_chat_id=int(chat_id),
|
|
minecraft_host=host,
|
|
minecraft_port=parsed_port,
|
|
poll_interval_seconds=parsed_interval,
|
|
status_file_path=status_file_path,
|
|
)
|