Files
takeyourmeds/server/messages.py
T
Frank Schwenk eaa019087e debug line test
2026-06-09 21:21:52 +02:00

50 lines
1.6 KiB
Python

from __future__ import annotations
import pathlib
import random
from typing import Any
import yaml
from server.settings import settings
_pool: dict[str, list[str]] | None = None
DEFAULT_MESSAGES: dict[str, list[str]] = {
"reminder": ["Zeit für Medis. Dein Gehirn wartet.", "Med-Time. Nicht vergessen."],
"success": ["Genommen. Held des Tages.", "Dopamin incoming."],
"missed": ["Verpasst. Das Gehirn ist enttäuscht.", "Nächstes Mal vielleicht."],
"streak": ["Streak läuft!", "Weiter so, Ausnahme vom ADHS-Gesetz."],
"snooze": ["Okay, noch 15 Min. Aber wirklich.", "Snooze aktiviert. Prokrastination approved."],
"easter_egg": ["Achievement unlocked!", "Du hast was Seltenes freigeschaltet."],
"roast_fallback": [
"Dein Gehirn hat heute schon aufgegeben, bevor du die PIN eingegeben hast.",
"Elvanse wartet. Du offenbar auch, aber im falschen Sinne.",
],
}
def load_messages(path: str | None = None) -> dict[str, list[str]]:
global _pool
if _pool is not None:
return _pool
p = pathlib.Path(path or settings.messages_path)
if p.exists():
raw = yaml.safe_load(p.read_text(encoding="utf-8")) or {}
_pool = {**DEFAULT_MESSAGES, **{k: v for k, v in raw.items() if isinstance(v, list)}}
else:
_pool = DEFAULT_MESSAGES
return _pool
def pick(category: str, **fmt: Any) -> str:
pool = load_messages()
choices = pool.get(category) or pool.get("reminder", ["Medis."])
text = random.choice(choices)
if fmt:
try:
text = text.format(**fmt)
except (KeyError, IndexError):
pass
return text