# 🚫 Чёрный список ссылок — v1.2 **Версия:** v1.2 **Дата:** 26 февраля 2026 г. **Статус:** ✅ Реализовано --- ## 📋 Описание Автоматическая система защиты чата от спама и запрещённых ссылок. Бот проверяет все сообщения, удаляет спам, предупреждает нарушителей и банит при достижении лимита предупреждений. --- ## 🎯 Возможности - ✅ Проверка всех сообщений на запрещённые ссылки - ✅ Чёрный список доменов, паттернов, ключевых слов - ✅ Авто-удаление спам-сообщений - ✅ Система предупреждений (3 → бан) - ✅ Уведомление админа о каждом случае - ✅ Гибкие настройки (удаление, предупреждения, бан) - ✅ Исключения для админов --- ## 🛡️ Что блокируется ### 1. Домены из чёрного списка ``` spam.com fake-giveaway.xyz phishing-site.com ... ``` ### 2. Паттерны ссылок ``` t.me/spam_ vk.com/scam_ bit.ly/spam ``` ### 3. Ключевые слова ``` выигрыш в лотерею бесплатный биткоин заработок без вложений гарантированный доход ``` --- ## 📱 Команды админа ### Управление доменами: | Команда | Описание | Пример | |---------|----------|--------| | `/add_domain <домен>` | Добавить домен в ЧС | `/add_domain spam.com` | | `/remove_domain <домен>` | Удалить домен из ЧС | `/remove_domain spam.com` | | `/domains` | Показать все домены | `/domains` | ### Управление паттернами: | Команда | Описание | Пример | |---------|----------|--------| | `/add_pattern <паттерн>` | Добавить паттерн в ЧС | `/add_pattern t.me/spam_` | | `/remove_pattern <паттерн>` | Удалить паттерн из ЧС | `/remove_pattern t.me/spam_` | | `/patterns` | Показать все паттерны | `/patterns` | ### Управление ключевыми словами: | Команда | Описание | Пример | |---------|----------|--------| | `/add_keyword <слово>` | Добавить ключ в ЧС | `/add_keyword выигрыш` | | `/remove_keyword <слово>` | Удалить ключ из ЧС | `/remove_keyword выигрыш` | | `/keywords` | Показать все ключи | `/keywords` | ### Предупреждения: | Команда | Описание | Пример | |---------|----------|--------| | `/warnings` | Пользователи с предупреждениями | `/warnings` | | `/clear_warnings ` | Сбросить предупреждения | `/clear_warnings 123456789` | | `/antispam_stats` | Статистика анти-спама | `/antispam_stats` | | `/reload_antispam` | Перезагрузить конфиг | `/reload_antispam` | --- ## 🎯 Сценарии использования ### Сценарий 1: Отправка запрещённой ссылки **Пользователь пишет:** ``` Заходите на сайт! spam.com - там крутые предложения! ``` **Бот:** 1. ✅ Находит домен `spam.com` в чёрном списке 2. ✅ **Удаляет сообщение** из чата 3. ✅ Пишет нарушителю в личку: ``` ⚠️ Предупреждение #1 В вашем сообщении обнаружена запрещённая ссылка или спам. Причина: Запрещённый домен: spam.com 📊 Ваши нарушения: 1 из 3 При следующем нарушении будет публичное предупреждение. При достижении 3 предупреждений — бан. ``` 4. ✅ Уведомляет админа: ``` ⚠️ СПАМ В ЧАТЕ! Пользователь: Иван Иванов ID: 123456789 Квартира: 45 Причина: Запрещённый домен: spam.com Предупреждений: 1 из 3 ``` --- ### Сценарий 2: Повторное нарушение **Пользователь снова пишет:** ``` Ну тогда вот: t.me/spam_channel - заходите! ``` **Бот:** 1. ✅ Находит паттерн `t.me/spam_` 2. ✅ **Удаляет сообщение** 3. ✅ Пишет в личку (предупреждение #2) 4. ✅ Уведомляет админа --- ### Сценарий 3: Третье нарушение — БАН! **Пользователь в третий раз:** ``` cryptoscam.io - бесплатный биткоин! ``` **Бот:** 1. ✅ Находит домен `cryptoscam.io` 2. ✅ **Удаляет сообщение** 3. ✅ Пишет в личку: ``` 🚫 ВЫ ЗАБАНЕНЫ Причина: Систематический спам (3 предупреждений). Вы больше не можете писать в чат. ``` 4. ✅ **Удаляет из чата** (бан) 5. ✅ Помечает `is_banned=True` в БД 6. ✅ Уведомляет админа --- ### Сценарий 4: Добавление нового домена **Админ видит спам:** ``` new-scam.xyz - заходите! ``` **Админ:** ```bash /add_domain new-scam.xyz ``` **Бот:** ``` ✅ Домен new-scam.xyz добавлен в чёрный список ``` **Теперь этот домен блокируется автоматически!** --- ### Сценарий 5: Просмотр статистики **Админ:** ```bash /antispam_stats ``` **Бот:** ``` 📊 Статистика анти-спама 📁 Чёрный список: ├─ Домены: 15 ├─ Паттерны: 8 └─ Ключевые слова: 12 ⚠️ Предупреждения: ├─ Активные: 5 └─ Забанено за спам: 2 ⚙️ Настройки: ├─ Удалять сообщения: ✅ ├─ Предупреждать пользователя: ✅ ├─ Уведомлять админа: ✅ └─ Бан после 3 предупреждений ``` --- ### Сценарий 6: Сброс предупреждений **Админ видит:** ```bash /warnings # Ответ: ⚠️ Пользователи с предупреждениями • Иван Иванов (кв. 45) — 2 предупр. • Петр Петров (кв. 88) — 1 предупр. ``` **Админ хочет сбросить Петру:** ```bash /clear_warnings 987654321 ``` **Бот:** ``` ✅ Предупреждения пользователя 987654321 сброшены ``` --- ## ⚙️ Настройки Файл: `data/bad_domains.json` ```json { "settings": { "delete_message": true, // Удалять спам-сообщения "warn_user": true, // Предупреждать пользователя "notify_admin": true, // Уведомлять админа "ban_after_warnings": 3, // Бан после N предупреждений "exclude_verified": false, // Исключить верифицированных "exclude_admins": true // Исключить админов } } ``` **Можно изменить вручную** в файле или через команду `/reload_antispam` после редактирования. --- ## 🗄️ База данных ### Таблица `spam_warnings`: ```sql CREATE TABLE spam_warnings ( warning_id INTEGER PRIMARY KEY AUTOINCREMENT, user_id BIGINT NOT NULL, message_text TEXT, reason TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, is_active BOOLEAN DEFAULT 1, FOREIGN KEY (user_id) REFERENCES users(user_id) ) ``` ### Поле в `users`: ```sql ALTER TABLE users ADD COLUMN spam_warning_count INTEGER DEFAULT 0 ``` --- ## 🧪 Тестирование ### Чек-лист проверки: #### 1. Добавление домена ```bash # Админ: /add_domain test-spam.com /domains ``` - [ ] Домен добавлен - [ ] Показывается в списке #### 2. Блокировка ссылки ```bash # С другого аккаунта: Заходите на test-spam.com! ``` - [ ] Сообщение удалено - [ ] В личку пришло предупреждение #1 - [ ] Админ получил уведомление #### 3. Повторное нарушение ```bash # Снова: Ещё ссылка: test-spam.com ``` - [ ] Предупреждение #2 - [ ] Счётчик увеличился #### 4. Третье нарушение — бан ```bash # В третий раз: test-spam.com ``` - [ ] Предупреждение #3 - [ ] Пользователь забанен - [ ] Удалён из чата #### 5. Сброс предупреждений ```bash # Админ: /warnings /clear_warnings ``` - [ ] Предупреждения сброшены --- ## 📁 Изменённые файлы | Файл | Изменения | |------|-----------| | `data/bad_domains.json` | Новый файл с ЧС | | `services/antispam.py` | Новый сервис проверки | | `handlers/antispam.py` | Новые хендлеры | | `handlers/chat_monitor.py` | Добавлена проверка на спам | | `database/models.py` | Модели SpamWarning + поле spam_warning_count | | `database/migrate_add_spam_warnings.py` | Миграция БД | | `handlers/__init__.py` | Импорт antispam_router | | `main.py` | Регистрация antispam_router | --- ## 🚀 Как использовать ### Для админа: 1. **Добавить спам-домен:** ``` /add_domain spam.com ``` 2. **Посмотреть статистику:** ``` /antispam_stats ``` 3. **Проверить предупреждения:** ``` /warnings ``` ### Для жильца: **Ничего делать не нужно!** Бот работает автоматически. **Если получил предупреждение:** - Не отправляй ссылки из чёрного списка - Если ссылка легальная — напиши админу --- ## 💡 Советы ### Какие домены добавлять: - ✅ Спам-сайты - ✅ Фишинг - ✅ Мошеннические лотереи - ✅ Фейковые магазины ### Какие паттерны добавлять: - ✅ `t.me/spam_` — спам-каналы - ✅ `vk.com/fake_` — фейковые страницы - ✅ `bit.ly/scam` — сокращённые спам-ссылки ### Какие ключевые слова добавлять: - ✅ «выигрыш в лотерею» - ✅ «бесплатный биткоин» - ✅ «заработок без вложений» --- ## 🔧 Отладка ### Посмотреть предупреждения в БД: ```bash cd /home/matrixhasyou/domovoy_bot source venv/bin/activate sqlite3 database/domovoy.db SELECT * FROM spam_warnings ORDER BY created_at DESC LIMIT 10; ``` ### Логи: ```bash tail -f logs/bot.log | grep -i spam ``` ### Перезагрузить конфиг: ```bash /reload_antispam ``` --- ## ✅ Преимущества | Было | Стало | |------|-------| | Спам в чате | **Авто-удаление** | | Ручная модерация | **Бот работает 24/7** | | Нет учёта нарушений | **3 предупреждения → бан** | | Не видно кто спамит | **Статистика и логи** | | Нет чёрного списка | **Домены + паттерны + ключи** | --- **Защита от спама готова! 🛡️** *Следующий шаг: тестирование на тестовой группе и фиксация версии v1.2*