from typing import Union import aiogram import html from src.notifications.base import INotificationService from src.processor.dto import EnrichedNewsItemDTO class TelegramNotifier(INotificationService): def __init__(self, bot: aiogram.Bot, chat_id: Union[str, int]): self.bot = bot self.chat_id = chat_id async def send_alert(self, item: EnrichedNewsItemDTO) -> None: title = html.escape(item.title) summary = html.escape(item.summary_ru) anomalies_list = [html.escape(a) for a in item.anomalies_detected] if item.anomalies_detected else [] anomalies_text = ", ".join(anomalies_list) if anomalies_list else "None" url = html.escape(item.url) formatted_text = ( f"{title}\n\n" f"Relevance: {item.relevance_score}/10\n" f"Anomalies: {anomalies_text}\n\n" f"{summary}\n\n" f"Source" ) await self.bot.send_message(chat_id=self.chat_id, text=formatted_text, parse_mode="HTML")