From 695a6a36085fb59c448021c982bb5ae32c533b0e Mon Sep 17 00:00:00 2001 From: Sergey Date: Sun, 17 May 2026 19:58:21 +0700 Subject: [PATCH] =?UTF-8?q?feat:=20=D1=83=D0=B2=D0=B5=D0=B4=D0=BE=D0=BC?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B2=20MAX=20(VK=20Teams)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- monitor.py | 35 ++++++++++++++++++++++++++++++++++- stack.yml | 5 +++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/monitor.py b/monitor.py index 991b1c0..02ebe2e 100644 --- a/monitor.py +++ b/monitor.py @@ -26,6 +26,11 @@ TELEGRAM_BOT_TOKEN = os.environ["TELEGRAM_BOT_TOKEN"] TELEGRAM_CHAT_ID = os.environ["TELEGRAM_CHAT_ID"] TELEGRAM_API_URL = os.getenv("TELEGRAM_API_URL", "https://api.telegram.org") +# MAX (VK Teams) — опционально, если не заданы — уведомления не отправляются +MAX_BOT_TOKEN = os.getenv("MAX_BOT_TOKEN", "") +MAX_CHAT_ID = os.getenv("MAX_CHAT_ID", "") +MAX_API_URL = os.getenv("MAX_API_URL", "https://platform-api.max.ru") + # Имя address-list в MikroTik (/ip firewall address-list) ADDRESS_LIST_NAME = os.environ["ADDRESS_LIST_NAME"] @@ -63,8 +68,36 @@ async def send_telegram(message: str) -> None: log.error("Telegram: ошибка отправки — %s", exc) +async def send_max(message: str) -> None: + """Отправляет уведомление в MAX (VK Teams).""" + if not MAX_BOT_TOKEN or not MAX_CHAT_ID: + return + url = f"{MAX_API_URL}/messages" + headers = { + "Authorization": MAX_BOT_TOKEN, + "Content-Type": "application/json", + } + # MAX не поддерживает HTML-теги — убираем их + import re + clean = re.sub(r"<[^>]+>", "", message) + payload = {"chat_id": int(MAX_CHAT_ID), "text": clean} + async with httpx.AsyncClient(timeout=10) as client: + try: + resp = await client.post(url, headers=headers, json=payload) + log.info("MAX response %s: %s", resp.status_code, resp.text) + resp.raise_for_status() + log.info("MAX: сообщение отправлено") + except Exception as exc: + log.error("MAX: ошибка отправки — %s", exc) + + def notify(message: str) -> None: - asyncio.run(send_telegram(message)) + async def _send_all(): + await asyncio.gather( + send_telegram(message), + send_max(message), + ) + asyncio.run(_send_all()) # ────────────────────────────────────────────── diff --git a/stack.yml b/stack.yml index b7911ff..34de9c2 100644 --- a/stack.yml +++ b/stack.yml @@ -35,6 +35,11 @@ services: # URL API (замените на прокси если api.telegram.org заблокирован) - TELEGRAM_API_URL=https://api.telegram.org + # MAX (VK Teams) — опционально, удалите если не используете + - MAX_BOT_TOKEN=your_max_bot_token # ← токен бота MAX + - MAX_CHAT_ID=123456789 # ← ID чата в MAX + - MAX_API_URL=https://platform-api.max.ru + # Имя address-list из /ip firewall address-list на MikroTik - ADDRESS_LIST_NAME=monitor