Vaktija: dodaj izlazak sunca (granica sabaha)

- namaz_vrijeme prima i koji="izlazak" (izlazak sunca, vakat[1]).
- Uz sabah odgovor se doda "Sabah se klanja do izlaska sunca, u HH:MM"
  (za današnji ili sutrašnji sabah, sa odgovarajućim danom).
- "Sljedeći namaz" i dalje preskače izlazak sunca (nije namaz).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LzKpYaEsuWDevuNnvSjcFW
This commit is contained in:
idriz
2026-09-11 18:52:15 +02:00
parent f17a16a34d
commit f2218e3237

View File

@@ -12,16 +12,19 @@ from . import client, store
log = logging.getLogger("idriz.vaktija")
# indeks u vakat[] po namazu (index 1 = izlazak sunca, nije namaz)
IDX = {"sabah": 0, "podne": 2, "ikindija": 3, "aksam": 4, "jacija": 5}
PRETTY = {"sabah": "sabah", "podne": "podne", "ikindija": "ikindija", "aksam": "akšam", "jacija": "jacija"}
REDOSLIJED = ["sabah", "podne", "ikindija", "aksam", "jacija"]
# indeks u vakat[] (index 1 = izlazak sunca — nije namaz, ali granica sabaha)
IDX = {"sabah": 0, "izlazak": 1, "podne": 2, "ikindija": 3, "aksam": 4, "jacija": 5}
PRETTY = {"sabah": "sabah", "izlazak": "izlazak sunca", "podne": "podne",
"ikindija": "ikindija", "aksam": "akšam", "jacija": "jacija"}
REDOSLIJED = ["sabah", "podne", "ikindija", "aksam", "jacija"] # "sljedeći namaz" — bez izlaska sunca
# rod za "već prošao/prošlo/prošla"
PROSAO = {"sabah": "prošao", "podne": "prošlo", "ikindija": "prošla", "aksam": "prošao", "jacija": "prošla"}
PROSAO = {"sabah": "prošao", "izlazak": "prošao", "podne": "prošlo",
"ikindija": "prošla", "aksam": "prošao", "jacija": "prošla"}
INSTRUCTIONS = """NAMAZ / VAKTIJA (alat: namaz_vrijeme): kazuješ vremena dnevnih namaza (sabah, podne, ikindija, akšam, jacija) za postavljenu lokaciju.
- Kad dijete pita "kad je sljedeći namaz?", pozovi namaz_vrijeme sa koji="sljedeci".
- Kad pita za određeni namaz ("kad je ikindija?", "kad je sabah?"), pozovi namaz_vrijeme sa tim imenom (sabah, podne, ikindija, aksam, jacija). Alat sam odlučuje odnosi li se na današnji (ako tek nadolazi) ili sutrašnji namaz (ako je današnji već prošao).
- Kad dijete pita "kad je sljedeći namaz?", pozovi namaz_vrijeme sa koji="sljedeci". (Izlazak sunca nije namaz, pa nije "sljedeći namaz".)
- Kad pita za određeni namaz ("kad je ikindija?", "kad je sabah?"), pozovi namaz_vrijeme sa tim imenom (sabah, podne, ikindija, aksam, jacija). Alat sam odlučuje odnosi li se na današnji (ako tek nadolazi) ili sutrašnji (ako je današnji već prošao).
- Može se pitati i "kad je izlazak sunca?" (koji="izlazak") — to je granica do kad se klanja sabah. Kod sabaha alat to i sam doda.
- Alat vraća gotovu rečenicu na bosanskom — izgovori je djetetu prirodno, bez izmišljanja vremena.
- Ako alat kaže da nema podataka, reci to iskreno (možda nema interneta)."""
@@ -32,8 +35,8 @@ SCHEMA = {
"parameters": {
"type": "object",
"properties": {
"koji": {"type": "string", "enum": ["sljedeci", "sabah", "podne", "ikindija", "aksam", "jacija"],
"description": "'sljedeci' ili ime namaza."},
"koji": {"type": "string", "enum": ["sljedeci", "sabah", "izlazak", "podne", "ikindija", "aksam", "jacija"],
"description": "'sljedeci' za sljedeći namaz, ime namaza, ili 'izlazak' za izlazak sunca."},
},
"required": ["koji"],
},
@@ -74,6 +77,11 @@ def _hhmm(t: dt.datetime) -> str:
return t.strftime("%H:%M")
def _do_izlaska(vakat: list[str], date: dt.date) -> str:
"""Napomena uz sabah: do kad se može klanjati (do izlaska sunca)."""
return f" Sabah se klanja do izlaska sunca, u {_hhmm(_dt(vakat, IDX['izlazak'], date))}."
async def namaz_vrijeme(ctx: AppContext, args: dict) -> str:
koji = (args.get("koji") or "sljedeci").strip().lower()
loc_id = store.get_location_id()
@@ -91,6 +99,8 @@ async def namaz_vrijeme(ctx: AppContext, args: dict) -> str:
if t > now:
delta = int((t - now).total_seconds() // 60)
recenica = f"Sljedeći namaz je {PRETTY[name]}, u {_hhmm(t)}, {_za(delta)}."
if name == "sabah":
recenica += _do_izlaska(vakat, today)
return f'Reci djetetu prirodno na bosanskom: "{recenica}"'
# svi današnji prošli -> sutra sabah
tomorrow = today + dt.timedelta(days=1)
@@ -100,6 +110,7 @@ async def namaz_vrijeme(ctx: AppContext, args: dict) -> str:
t = _dt(vsutra, IDX["sabah"], tomorrow)
delta = int((t - now).total_seconds() // 60)
recenica = f"Svi današnji namazi su prošli. Sljedeći je sabah sutra, u {_hhmm(t)}, {_za(delta)}."
recenica += _do_izlaska(vsutra, tomorrow)
return f'Reci djetetu prirodno na bosanskom: "{recenica}"'
if koji not in IDX:
@@ -109,6 +120,8 @@ async def namaz_vrijeme(ctx: AppContext, args: dict) -> str:
if t_today > now:
delta = int((t_today - now).total_seconds() // 60)
recenica = f"{PRETTY[koji].capitalize()} je danas u {_hhmm(t_today)}, {_za(delta)}."
if koji == "sabah":
recenica += _do_izlaska(vakat, today)
return f'Reci djetetu prirodno na bosanskom: "{recenica}"'
# danas prošao -> sutra
tomorrow = today + dt.timedelta(days=1)
@@ -118,6 +131,8 @@ async def namaz_vrijeme(ctx: AppContext, args: dict) -> str:
t = _dt(vsutra, IDX[koji], tomorrow)
delta = int((t - now).total_seconds() // 60)
recenica = f"{PRETTY[koji].capitalize()} je danas već {PROSAO[koji]}. Sutra je u {_hhmm(t)}, {_za(delta)}."
if koji == "sabah":
recenica += _do_izlaska(vsutra, tomorrow)
return f'Reci djetetu prirodno na bosanskom: "{recenica}"'