diff --git a/README.md b/README.md index 85e7216..3c0d433 100644 --- a/README.md +++ b/README.md @@ -27,4 +27,9 @@ 10. Адрес для подключения к redis 11. Порт для подключения к redis -12. Пароль для подключения к redis (если нужен) \ No newline at end of file +12. Пароль для подключения к redis (если нужен) + + +UPD +Добавлена проверка доступности апи заббикса и алерт в телегу, если не доступен. +Добавлено изменнеие алерта на произвольный текст, если сообщение нельзя удалить из-за срока давности. diff --git a/config/.env-template b/config/.env-template index cfdacf2..9fe2a76 100755 --- a/config/.env-template +++ b/config/.env-template @@ -14,6 +14,7 @@ CFG__ZABBIX__ALERT_TEXT_DOWN=Zabbix service DOWN CFG__TGBOT__TOKEN=string CFG__TGBOT__CHAT_ID=00000000 CFG__TGBOT__TREAD_ID=0 +CFG__TGBOT__DELETE_MSG=string CFG__REDIS__HOST=localhost CFG__REDIS__PORT=6379 diff --git a/config/config.py b/config/config.py index 793e476..e0a8dfa 100755 --- a/config/config.py +++ b/config/config.py @@ -42,6 +42,7 @@ class TelegramBotConfig(BaseModel): token: str chat_id: int tread_id: int + delete_msg: str class ZabbixConfig(BaseModel): diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index 22f123f..b4ce7db 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -33,6 +33,7 @@ services: - CFG__TGBOT__TOKEN=string - CFG__TGBOT__CHAT_ID=000000 - CFG__TGBOT__TREAD_ID=0 + - CFG__TGBOT__DELETE_MSG=Deleted - CFG__REDIS__HOST=redis - CFG__REDIS__PORT=6379 diff --git a/main.py b/main.py index adeca18..5b0805b 100644 --- a/main.py +++ b/main.py @@ -8,7 +8,13 @@ from redis_db import ( del_value, ) import asyncio -from telegram import del_message, send_message, start_bot, send_zabbix_api_alert +from telegram import ( + del_message, + send_message, + start_bot, + send_zabbix_api_alert, + edit_message, +) async def dashboard(): @@ -59,8 +65,12 @@ async def dashboard(): if resp["status"] == 200: await del_value(closed_alert) if resp["status"] == 400: - log.warning(f"remove olg message {msg_id} from reddis") - await del_value(closed_alert) + resp = await edit_message(int(msg_id), conf.tgbot.delete_msg) + if resp["status"] == 200: + await del_value(closed_alert) + if resp["status"] == 400: + log.warning(f"remove olg message {msg_id} from reddis") + await del_value(closed_alert) async def dashboard_loop(): diff --git a/telegram/__init__.py b/telegram/__init__.py index 0215468..69c669c 100644 --- a/telegram/__init__.py +++ b/telegram/__init__.py @@ -1,5 +1,6 @@ from .message import ( send_message, + edit_message, del_message, send_zabbix_api_alert, ) @@ -7,6 +8,7 @@ from .bot import start_bot __all__ = [ "send_message", + "edit_message", "del_message", "start_bot", "send_zabbix_api_alert", diff --git a/telegram/message.py b/telegram/message.py index 29109c8..e95ed88 100644 --- a/telegram/message.py +++ b/telegram/message.py @@ -45,6 +45,35 @@ async def send_message(message: str, event_id: int) -> dict: return {"status": e} +async def edit_message(message_id: int, message: str) -> dict: + url = f"https://api.telegram.org/bot{conf.tgbot.token}/editMessageText" + async with aiohttp.ClientSession() as session: + try: + async with session.post( + url, + json={ + "chat_id": conf.tgbot.chat_id, + "message_id": message_id, + "text": message, + }, + ) as response: + if response.status == 200: + log.info(f"Message ID {message_id} edited") + return { + "status": response.status, + } + else: + log.warning( + f"Message ID {message_id} NOT edit. Response status: {response.status}" + ) + return { + "status": response.status, + } + except Exception as e: + log.warning(f"Exception: {e}") + return {"status": e} + + async def del_message( message_id: int, ) -> dict: