Files
zyrarbot/zyrarbot/settings.py
T
lgooseandClaude Bot e194a8611c refactor(config): Settings i JsonFileStore jako podstawa pakietu
Początek pakietu zyrarbot, budowanego wedle zasady jedna klasa = jeden plik.

- Settings zbiera konfigurację ze zmiennych środowiskowych oraz ścieżki
  i limity, które dotąd były literałami rozsianymi po bot.py i web.py
  ("config/config.json", "uploads", zakres 1-999, domyślne 5 odtworzeń).
- JsonFileStore zastępuje sześć niemal identycznych bloków open/json.load
  z ręcznym try/except. Brakujący lub uszkodzony plik daje pusty słownik
  zamiast wyjątku, a zapis sam tworzy katalog.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 01:09:52 +02:00

44 lines
1.1 KiB
Python

from __future__ import annotations
import os
from dataclasses import dataclass
from dotenv import load_dotenv
@dataclass(frozen=True)
class Settings:
"""Konfiguracja aplikacji odczytana ze zmiennych środowiskowych."""
discord_token: str | None = None
guild_id: int | None = None
config_dir: str = "config"
uploads_dir: str = "uploads"
static_dir: str = "static"
web_host: str = "0.0.0.0"
web_port: int = 8000
default_plays: int = 5
history_limit: int = 50
min_plays: int = 1
max_plays: int = 999
@classmethod
def from_env(cls) -> Settings:
load_dotenv()
raw_guild_id = os.getenv("GUILD_ID")
return cls(
discord_token=os.getenv("DISCORD_TOKEN"),
guild_id=int(raw_guild_id) if raw_guild_id else None,
)
@property
def config_file(self) -> str:
return os.path.join(self.config_dir, "config.json")
@property
def history_file(self) -> str:
return os.path.join(self.config_dir, "history.json")
def is_valid_plays(self, value: int) -> bool:
return self.min_plays <= value <= self.max_plays