From f2218e32378b694d9b5b2b735168969f68079c21 Mon Sep 17 00:00:00 2001 From: idriz Date: Fri, 11 Sep 2026 18:52:15 +0200 Subject: [PATCH] Vaktija: dodaj izlazak sunca (granica sabaha) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 Claude-Session: https://claude.ai/code/session_01LzKpYaEsuWDevuNnvSjcFW --- idriz/apps/vaktija/manifest.py | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/idriz/apps/vaktija/manifest.py b/idriz/apps/vaktija/manifest.py index 6e921f9..e145da7 100644 --- a/idriz/apps/vaktija/manifest.py +++ b/idriz/apps/vaktija/manifest.py @@ -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}"'