UdoChudo ccb47d527f
All checks were successful
Build and Push Docker Images / build (push) Successful in 1m28s
refactor: modularize Telegram bot and add RabbitMQ client foundation
- Рефакторинг Telegram бота на модульную структуру для удобства поддержки и расширения
- Создан общий RabbitMQ клиент для Flask и Telegram компонентов
- Подготовлена базовая архитектура для будущего масштабирования и новых функций

Signed-off-by: UdoChudo <stream@udochudo.ru>
2025-06-16 09:08:46 +05:00

52 lines
2.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# composer.py
import time
from typing import Optional, Tuple
from app.bot.utils.tg_escape_chars import escape_telegram_chars # или твоя функция, если кастомная
def compose_telegram_message(data: dict) -> Tuple[str, Optional[str]]:
"""
Формирует сообщение для Telegram и возвращает его вместе со ссылкой (если есть).
Args:
data (dict): сообщение из очереди
Returns:
Tuple[str, Optional[str]]: текст сообщения и ссылка для кнопки (если есть)
"""
try:
priority_map = {
'High': '⚠️',
'Disaster': '⛔️'
}
priority = priority_map.get(data.get('severity', ''), '')
msg = escape_telegram_chars(data.get('msg', ''))
host = escape_telegram_chars(data.get('host', ''))
ip = escape_telegram_chars(data.get('ip', ''))
severity = escape_telegram_chars(data.get('severity', ''))
status = data.get('status', '').upper()
timestamp = int(data.get('date_reception', 0))
time_str = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(timestamp))
if status == "PROBLEM":
message = (
f"{priority} {host} ({ip})\n"
f"<b>Описание</b>: {msg}\n"
f"<b>Критичность</b>: {severity}\n"
f"<b>Время возникновения</b>: {time_str} Мск\n"
)
else:
message = (
f"{host} ({ip})\n"
f"<b>Описание</b>: {msg}\n"
f"<b>Критичность</b>: {severity}\n"
f"<b>Проблема устранена!</b>\n"
f"<b>Время устранения</b>: {time_str} Мск\n"
)
link = data.get("link")
return message, link
except KeyError as e:
raise ValueError(f"Missing key in data: {e}")