Files
Vladimir Buzalka 2bdac59676 notebookvb
2026-06-14 12:07:35 +02:00

79 lines
2.9 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
recept_telegram.py — Telegram přenos pro recept-resolver.
Používá USER účet agenta (Claude Buzalka @vlado_claude_agent) přes Telethon
z Knihovny/telegram_user.py — VLASTNÍ session "recepty" (per-agent autorizace).
Odpovědi se párují přes Telegram reply (reply_to_msg_id), takže víc agentů na
témž účtu se nepoplete a každý si hlídá jen své odpovědi.
JEDNORÁZOVÝ KROK (dělá uživatel v terminálu — čeká na SMS kód):
python -m Knihovny.telegram_user login --jako recepty
Konfigurace (Medevio/.env): TELEGRAM_API_ID, TELEGRAM_API_HASH, TELEGRAM_PHONE
(viz Trilium „2026-06-14 Telegram — bot, user účet agenta a MCP server").
"""
import os
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
from Knihovny.telegram_user import posli_jako_ja, precti_zpravy, _new_client # noqa: E402
# Vlastní session recept-agenta (jedno přihlášení: login --jako recepty).
SESSION = "recepty"
# Komu agent píše = Vladův hlavní účet (z Trilium / TELEGRAM_CHAT_ID).
VLADO_UID = int(os.environ.get("TELEGRAM_CHAT_ID", "6639316354"))
def priprav() -> None:
"""Načte dialogy → do session cache se uloží entita Vlada. Nová session by ji
jinak neznala a posílání by spadlo na 'Could not find the input entity'.
Volá se jednou při startu resolveru (idempotentní, levné)."""
with _new_client(SESSION) as client:
if client.is_user_authorized():
client.get_dialogs(limit=50)
def posli_otazku(text: str) -> int:
"""Pošle otázku Vladovi z účtu agenta. Vrátí message_id (pro párování reply)."""
msg = posli_jako_ja(VLADO_UID, text, session=SESSION)
return msg.id
def posli_zpravu(text: str) -> None:
"""Pošle prostou zprávu (potvrzení / chybu)."""
posli_jako_ja(VLADO_UID, text, session=SESSION)
def baseline_since() -> int:
"""Aktuální nejvyšší message_id v chatu — výchozí bod při prvním startu
(aby resolver nezpracoval starou historii)."""
zpravy = precti_zpravy(VLADO_UID, limit=1, session=SESSION)
return max((z["id"] for z in zpravy), default=0)
def nacti_odpovedi(since_id: int = 0, limit: int = 50):
"""Vrátí (nove_odpovedi, novy_since_id).
Bere jen PŘÍCHOZÍ zprávy (ne naše) s id > since_id. Každá:
{message_id, text, reply_to_message_id}
"""
zpravy = precti_zpravy(VLADO_UID, limit=limit, session=SESSION)
out = []
new_since = since_id
for z in zpravy:
mid = z["id"]
if mid > new_since:
new_since = mid
if mid > since_id and not z["odeslal_ja"]:
out.append({
"message_id": mid,
"text": z["text"],
"reply_to_message_id": z["reply_na"],
})
out.sort(key=lambda x: x["message_id"]) # od nejstarší
return out, new_since