notebookvb
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user