51 lines
1.5 KiB
Python
51 lines
1.5 KiB
Python
from dataclasses import dataclass
|
|
from os import getenv
|
|
from pathlib import Path
|
|
|
|
from dotenv import load_dotenv
|
|
|
|
load_dotenv()
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class Config:
|
|
bot_token: str
|
|
allowed_user_ids: set[int]
|
|
vault_path: Path
|
|
daily_notes_dir: str
|
|
note_path_format: str
|
|
message_time_format: str
|
|
telegram_proxy: str | None
|
|
reminder_min_seconds: int
|
|
reminder_max_seconds: int
|
|
|
|
|
|
def _required(name: str) -> str:
|
|
value = getenv(name)
|
|
if not value:
|
|
raise RuntimeError(f"Не задана переменная окружения {name}")
|
|
return value
|
|
|
|
|
|
def _user_ids(value: str) -> set[int]:
|
|
return {int(user_id.strip()) for user_id in value.split(",") if user_id.strip()}
|
|
|
|
|
|
def _hours_to_seconds(value: str) -> int:
|
|
return int(float(value) * 60 * 60)
|
|
# return int(float(value))
|
|
|
|
|
|
def load_config() -> Config:
|
|
return Config(
|
|
bot_token=_required("BOT_TOKEN"),
|
|
allowed_user_ids=_user_ids(_required("ALLOWED_USER_IDS")),
|
|
vault_path=Path(_required("OBSIDIAN_VAULT_PATH")).expanduser().resolve(),
|
|
daily_notes_dir=getenv("DAILY_NOTES_DIR", "03 Journal"),
|
|
note_path_format=getenv("NOTE_PATH_FORMAT", "%Y/%m/%d.%m.%y.md"),
|
|
message_time_format=getenv("MESSAGE_TIME_FORMAT", "%H:%M"),
|
|
telegram_proxy=getenv("TELEGRAM_PROXY"),
|
|
reminder_min_seconds=_hours_to_seconds(getenv("REMINDER_MIN_HOURS", "2")),
|
|
reminder_max_seconds=_hours_to_seconds(getenv("REMINDER_MAX_HOURS", "3")),
|
|
)
|