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