From 39e78df55b84dcf0fc2a8d3258b0a1957eed0c01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9=20=D0=91=D1=83?= =?UTF-8?q?=D0=B4=D0=B0=D0=B5=D0=B2?= Date: Sun, 14 Jun 2026 01:00:27 +0800 Subject: [PATCH] =?UTF-8?q?AGENTS.MD:=20=D0=BC=D0=BE=D0=BD=D0=B8=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=20per-chat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AGENTS.MD | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/AGENTS.MD b/AGENTS.MD index dbc6ef8..e01b3ca 100644 --- a/AGENTS.MD +++ b/AGENTS.MD @@ -381,6 +381,10 @@ OpenDKIM milter (`Mode sv`) верифицирует входящие, но не - **`deltabot.py` `/join`:** проверка URL заменена с `"i.delta.chat" in value` на `re.match(r'https://i\.delta\.chat/#', value)` — устраняет обход подстрокой. - **`deltabot.py` `/save` и `/channels image`:** `file_blob` валидируется через `os.path.realpath` + проверка что результирующий путь остаётся внутри `ACCOUNTS_DIR` — защита от path traversal. +### 14.06.2026 — Мониторинг per-chat + +- **`deltabot.py` `monitor_worker()` и `/monitor`:** мониторы разграничены по чатам. `monitors.json` — `{chat_id: [...]}` (был глобальный список). `/monitor list` показывает только свои мониторы, алерты уходят только в чат-владелец. Добавлена автоматическая миграция старого формата. + ### 13.06.2026 — Изоляция бота - **`deltabot.py`:** добавлена проверка отправителя в начале `handle_message`. Сообщения от неизвестных email игнорируются без ответа. @@ -490,16 +494,17 @@ TRUSTED_DOMAINS = {"budaev.org", "dc.budaev.org"} ## Мониторинг сайтов (/monitor) **Файл:** `~/.config/deltabot/monitors.json` -**Воркер:** `monitor_worker()` — проверяет каждые 5 минут, шлёт алерт всем подписчикам при смене статуса. +**Формат:** `{chat_id: [{url, last_ok, last_check, last_detail}, ...]}` — каждый чат видит только свои мониторы. +**Воркер:** `monitor_worker()` — проверяет каждые 5 минут, шлёт алерт в чат, который добавил монитор, при смене статуса. | Команда | Действие | |---------|----------| | `/monitor add ` | Добавить (мгновенная проверка при добавлении) | -| `/monitor list` | Список с последним статусом | +| `/monitor list` | Список (только своего чата) | | `/monitor remove ` | Удалить по номеру или URL | -| `/monitor check` | Немедленная проверка всех | +| `/monitor check` | Немедленная проверка всех (своего чата) | -Алерт при падении отправляется **всем подписчикам** (`subscribers.json`). +Алерт при падении отправляется только в чат, добавивший монитор. **Не используется `subscribers.json`.** ---