#!/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