domovoy_bot/АНТИ-СПАМ_ЛИМИТЫ.md
Admin ba4676b0af v1.0 MVP - Инициализация проекта 🏠
 Регистрация и верификация жильцов
 Рейтинг активности (уровни)
 Детект шпионов (Score 0-100)
 Анти-мат система (3 предупреждения → бан)
 Админ-панель с рассылкой
 Учёт квартир (несколько жильцов)
 Телефоны экстренных служб и мастеров
 Еженедельный экспорт JSON
 Прокси (socks5) для обхода РКН

Бекап: backups/versions/v1.0_mvp_2026-02-26/

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-27 10:54:16 +00:00

404 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🚦 Анти-спам лимиты — v1.3
**Версия:** v1.3
**Дата:** 26 февраля 2026 г.
**Статус:** ✅ Реализовано
---
## 📋 Описание
Защита от флуда (спама сообщениями). Бот подсчитывает количество сообщений от каждого пользователя за период времени. При превышении лимита — предупреждает, при повторных нарушениях — мутит.
---
## 🎯 Возможности
- ✅ Подсчёт сообщений за период (10 за 60 сек)
- ✅ Авто-удаление сообщений при превышении лимита
- ✅ Система предупреждений (2 → мут)
- ✅ Мут на 30 минут (настраивается)
- ✅ Уведомление админа о нарушениях
- ✅ Команды мута/размута вручную
- ✅ Проверка истечения мута
---
## ⚙️ Настройки по умолчанию
| Параметр | Значение |
|----------|----------|
| **Макс. сообщений** | 10 |
| **За период** | 60 секунд |
| **Предупреждений до мута** | 2 |
| **Длительность мута** | 30 минут |
| **Исключать админов** | ✅ Да |
---
## 📱 Команды админа
### Мут/размут:
| Команда | Описание | Пример |
|---------|----------|--------|
| `/mute <ID> [минуты]` | Замутить пользователя | `/mute 123456789 30` |
| `/unmute <ID>` | Размутить пользователя | `/unmute 123456789` |
| `/check_mute <ID>` | Проверить статус мута | `/check_mute 123456789` |
| `/muted` | Список замученных | `/muted` |
### Статистика:
| Команда | Описание | Пример |
|---------|----------|--------|
| `/rate_stats` | Статистика лимитов | `/rate_stats` |
| `/user_rate <ID>` | Статистика пользователя | `/user_rate 123456789` |
| `/clear_rate_warnings <ID>` | Сбросить предупреждения | `/clear_rate_warnings 123456789` |
---
## 🎯 Сценарии использования
### Сценарий 1: Превышение лимита (флуд)
**Пользователь быстро отправляет 10 сообщений:**
```
Привет!
Как дела?
Что нового?
Кто сегодня будет?
Во сколько встреча?
Где встреча?
Нужно взять что-то?
Сколько стоит?
Кто организует?
Можно с детьми?
```
**Бот:**
1. ✅ Находит превышение лимита (10 за 60 сек)
2.**Удаляет 11-е сообщение**
3. ✅ Пишет нарушителю в личку:
```
⚠️ Предупреждение #1
Вы превысили лимит сообщений!
📊 Ваши нарушения: 1 из 2
Лимит: 10 сообщений за 60 сек.
Вы отправили: 10 сообщ.
При достижении 2 предупреждений вы будете замучены на 30 мин.
```
4. ✅ Уведомляет админа:
```
⚠️ ФЛУД В ЧАТЕ!
Пользователь: Иван Иванов
ID: 123456789
Квартира: 45
Сообщений: 10 (лимит: 10)
Предупреждений: 1 из 2
```
---
### Сценарий 2: Повторный флуд — МУТ
**Пользователь снова флудит через 5 минут:**
**Бот:**
1. ✅ Находит превышение
2.**Удаляет сообщение**
3. ✅ Пишет предупреждение #2
4.**Мутит на 30 минут**
5. ✅ Пишет пользователю:
```
🔇 ВЫ ЗАМУЧЕНЫ
Причина: Превышение лимита сообщений (2 предупреждений).
Мут до: 26.02.2026 17:30
Вы не сможете писать в чат до указанного времени.
```
---
### Сценарий 3: Ручной мут админом
**Админ видит что пользователь нарушает:**
**Админ:**
```bash
/mute 123456789 60
```
**Бот:**
```
🔇 Пользователь замучен
Пользователь: Иван Иванов
ID: 123456789
До: 26.02.2026 18:00
Пользователь не сможет писать в чат до указанного времени.
```
---
### Сценарий 4: Истечение мута
**Через 30 минут:**
**Бот автоматически:**
1. ✅ Проверяет истёк ли мут
2.**Размучивает пользователя**
3. ✅ Следующее сообщение пользователя **пропускается**
---
### Сценарий 5: Проверка статуса мута
**Админ:**
```bash
/check_mute 123456789
```
**Бот:**
```
⏳ Мут активен
Пользователь: Иван Иванов
ID: 123456789
Осталось: 15 мин.
До: 26.02.2026 17:30
```
**Или если мут истёк:**
```
✅ Мут истёк
Пользователь: Иван Иванов
ID: 123456789
Пользователь размучен автоматически.
```
---
### Сценарий 6: Список всех замученных
**Админ:**
```bash
/muted
```
**Бот:**
```
🔇 Замученные пользователи
• Иван Иванов (кв. 45) — ещё 25 мин.
• Петр Петров (кв. 88) — ещё 10 мин.
```
---
### Сценарий 7: Статистика лимитов
**Админ:**
```bash
/rate_stats
```
**Бот:**
```
📊 Статистика лимитов сообщений
⚙️ Настройки:
├─ Максимум сообщений: 10
├─ За период: 60 сек
├─ Длительность мута: 30 мин
└─ Предупреждений перед мутом: 2
🔥 Нарушители (3)
⚠️ Иван Иванов — 8 сообщ.
⚠️ Петр Петров — 6 сообщ.
🔇 Василий Сидоров — 12 сообщ.
```
---
## 🗄️ База данных
### Таблица `message_rates`:
```sql
CREATE TABLE message_rates (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id BIGINT NOT NULL,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(user_id)
)
```
### Поля в `users`:
```sql
ALTER TABLE users ADD COLUMN is_muted BOOLEAN DEFAULT 0
ALTER TABLE users ADD COLUMN mute_until TIMESTAMP
ALTER TABLE users ADD COLUMN rate_limit_warnings INTEGER DEFAULT 0
```
---
## 🧪 Тестирование
### Чек-лист проверки:
#### 1. Быстрая отправка сообщений
```bash
# С другого аккаунта:
# Отправить 10 сообщений за 1 минуту
```
- [ ] 11-е сообщение удалено
- [ ] Пришло предупреждение #1 в личку
- [ ] Админ получил уведомление
#### 2. Повторный флуд
```bash
# Через 5 минут снова отправить 10 сообщений
```
- [ ] Предупреждение #2
- [ ] Пользователь замучен
- [ ] Сообщения удаляются
#### 3. Проверка мута
```bash
# Админ:
/check_mute <ID>
/muted
```
- [ ] Показывает правильный статус
- [ ] Оставшееся время верно
#### 4. Истечение мута
```bash
# Подождать 30 минут
# Отправить сообщение
```
- [ ] Сообщение прошло
- [ ] Мут снят автоматически
#### 5. Ручной мут/размут
```bash
# Админ:
/mute <ID> 10
/unmute <ID>
```
- [ ] Мут работает
- [ ] Размут работает
---
## 📁 Изменённые файлы
| Файл | Изменения |
|------|-----------|
| `services/rate_limiter.py` | Новый сервис лимитов |
| `handlers/ratelimit.py` | Новые хендлеры |
| `handlers/chat_monitor.py` | Проверка лимитов |
| `database/models.py` | Модели MessageRate + поля |
| `database/migrate_add_rate_limits.py` | Миграция БД |
| `handlers/__init__.py` | Импорт ratelimit_router |
| `main.py` | Регистрация ratelimit_router |
---
## 🚀 Как использовать
### Для админа:
1. **Посмотреть статистику:**
```
/rate_stats
```
2. **Замутить нарушителя:**
```
/mute 123456789 30
```
3. **Проверить пользователя:**
```
/user_rate 123456789
```
### Для жильца:
**Ничего делать не нужно!** Бот работает автоматически.
**Если получил предупреждение:**
- Не отправляй много сообщений подряд
- Подожди минуту перед новой серией
---
## 💡 Советы
### Настройка лимитов:
**Для активного чата (100+ сообщений/мин):**
- Увеличь лимит: `max_messages = 15`
- Уменьшь период: `period_seconds = 30`
**Для спокойного чата:**
- Уменьшь лимит: `max_messages = 5`
- Увеличь период: `period_seconds = 120`
### Когда мутить вручную:
- ✅ Троллинг
- ✅ Оскорбления
- ✅ Намеренный флуд
- ✅ Спам ссылками (вместе с чёрным списком)
---
## 🔧 Отладка
### Посмотреть сообщения в БД:
```bash
cd /home/matrixhasyou/domovoy_bot
source venv/bin/activate
sqlite3 database/domovoy.db
SELECT user_id, COUNT(*) as msg_count, MAX(timestamp) as last_msg
FROM message_rates
WHERE timestamp > datetime('now', '-1 minute')
GROUP BY user_id
ORDER BY msg_count DESC;
```
### Логи:
```bash
tail -f logs/bot.log | grep -i "флуд\|мут"
```
---
## ✅ Преимущества
| Было | Стало |
|------|-------|
| Флуд в чате | **Авто-удаление** |
| Нет защиты | **Лимит 10 сообщ./мин** |
| Ручной контроль | **Авто-мут** |
| Нет статистики | **/rate_stats** |
---
**Защита от флуда готова! 🛡️**
*Следующий шаг: тестирование на тестовой группе и фиксация версии v1.3*