"""로또 큐레이션·당첨 알림 — 텔레그램 푸시.""" import logging from typing import Dict, Any # 기존 에이전트들과 동일한 패턴: send_raw(text, reply_markup=None, chat_id=None) # chat_id 생략 시 기본 TELEGRAM_CHAT_ID로 자동 발송. from ..telegram.messaging import send_raw logger = logging.getLogger("agent-office") LOTTO_URL = "https://gahusb.synology.me/lotto" def _format_briefing(payload: Dict[str, Any]) -> str: draw_no = payload["draw_no"] nar = payload["narrative"] conf = payload["confidence"] # 분배 칩 — core 5세트의 risk_tag 빈도 core = payload["picks"]["core"] role_count = {"안정": 0, "균형": 0, "공격": 0} for p in core: role_count[p["risk_tag"]] = role_count.get(p["risk_tag"], 0) + 1 chip = " · ".join(f"{k} {v}" for k, v in role_count.items() if v) msg = [ f"🎟 {draw_no}회 · 큐레이션 떴음", "", f"\"{nar['headline']}\"", f"신뢰도 {conf} · 분배 {chip}", ] retro = nar.get("retrospective") or "" if retro: msg += ["", f"▸ 회고: {retro}"] msg += ["", f"👉 결정 카드 보러가기 ({LOTTO_URL})"] return "\n".join(msg) def _format_prize_alert(event: Dict[str, Any]) -> str: return ( "🚨 로또 당첨 가능성!\n" f"{event['draw_no']}회 — {event['match_count']}개 일치\n" f"번호: {', '.join(str(n) for n in event['numbers'])}\n" "동행복권에서 즉시 확인하세요." ) async def send_curator_briefing(payload: Dict[str, Any]) -> None: text = _format_briefing(payload) try: await send_raw(text) except Exception as e: logger.warning(f"[telegram_lotto] briefing send failed: {e}") async def send_prize_alert(event: Dict[str, Any]) -> None: text = _format_prize_alert(event) try: await send_raw(text) except Exception as e: logger.warning(f"[telegram_lotto] prize alert send failed: {e}")