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`.** ---