# 😠 Рейтинг токсичности — v1.9

**Версия:** v1.9
**Дата:** 26 февраля 2026 г.
**Статус:** ✅ Реализовано

---

## 📋 Описание

Система анализа токсичности сообщений и выявления конфликтных пользователей. Бот анализирует лексику на оскорбления, агрессию, угрозы, дискриминацию. Админ получает рейтинг токсичных пользователей и уведомления о токсичных сообщениях.

---

## 🎯 Возможности

- ✅ Анализ лексики (оскорбления, агрессия, угрозы, дискриминация)
- ✅ Детекция паттернов агрессии (CAPS, множественные знаки)
- ✅ Toxicity Score 0-100 для каждого пользователя
- ✅ Топ токсичных пользователей
- ✅ Статистика по пользователю
- ✅ Жалобы на пользователей
- ✅ Уведомления о токсичных сообщениях
- ✅ Уровни токсичности с emoji

---

## 📱 Команды

### Для администраторов:

| Команда | Описание | Пример |
|---------|----------|--------|
| `/toxic_top [дни] [лимит]` | Топ токсичных пользователей | `/toxic_top 7 10` |
| `/toxic_stats <user_id>` | Статистика токсичности | `/toxic_stats 123456789` |
| `/toxicity_report` | Общий отчёт по чату | `/toxicity_report` |
| `/clear_toxicity <user_id>` | Сбросить токсичность | `/clear_toxicity 123` |
| `/complaint <user_id> [причина]` | Жалоба на пользователя | `/complaint 123 Оскорбления` |

---

## 🎯 Категории токсичности

| Категория | Примеры слов | Баллы |
|-----------|--------------|-------|
| **Оскорбления** | дурак, идиот, кретин, придурок, хам | +15 |
| **Агрессия** | заткнись, убью, ненавижу, достал | +15 |
| **Угрозы** | угрожаю, пожалеешь, найду, разберусь | +15 |
| **Дискриминация** | национальн, расов, религиозн | +15 |
| **CAPS LOCK** | >50% заглавных букв | +15 |
| **Паттерны** | !!!, ???, АААА, повторы | +10 |

---

## 🎯 Уровни токсичности

| Score | Уровень | Emoji | Действие |
|-------|---------|-------|----------|
| 0-10 | 😊 Нормальный | 😊 | Нет действий |
| 10-30 | 😐 Нейтральный | 😐 | Нет действий |
| 30-50 | ⚠️ Подозрительный | ⚠️ | Пометка в базе |
| 50-70 | 😠 Токсичный | 😠 | Уведомление админа |
| 70+ | 🚫 Очень токсичный | 🚫 | Рекомендуется бан |

---

## 🎯 Сценарии использования

### Сценарий 1: Топ токсичных

**Админ:**
```
/toxic_top 7 10
```

**Бот:**
```
😠 Топ токсичных пользователей (за 7 дн.)

1. Иван Иванов (кв. 45) 😠
   └─ Сообщений: 150
   └─ Токсичных: 45 (30%)
   └─ Средняя токсичность: 35
   └─ Максимальная: 80

2. Петр Петров (кв. 88) ⚠️
   └─ Сообщений: 100
   └─ Токсичных: 20 (20%)
   └─ Средняя токсичность: 25
   └─ Максимальная: 60
```

---

### Сценарий 2: Статистика пользователя

**Админ:**
```
/toxic_stats 123456789
```

**Бот:**
```
😠 Токсичность: Иван Иванов

Квартира: 45
Уровень: 😠 Токсичный

📊 Статистика (7 дн.)
├─ Всего сообщений: 150
├─ Токсичных: 45 (30%)
├─ Средняя токсичность: 35
└─ Максимальная: 80

📁 Категории
  └─ insults: 25
  └─ aggression: 15
  └─ CAPS LOCK: 5
```

---

### Сценарий 3: Жалоба на пользователя

**Админ:**
```
/complaint 123456789 Оскорбления соседей
```

**Бот:**
```
✅ Жалоба принята

Пользователь: Иван Иванов
Причина: Оскорбления соседей
Всего жалоб: 1
```

**Если жалоб >= 3:**
```
⚠️ Много жалоб!

Пользователь: Иван Иванов
Жалоб: 3

Рекомендуется проверить через /toxic_stats 123456789
```

---

### Сценарий 4: Общий отчёт

**Админ:**
```
/toxicity_report
```

**Бот:**
```
📊 Отчёт по токсичности

👥 Пользователей: 100
😠 Токсичных: 15 (15.0%)
📝 Всего жалоб: 25

🔥 Топ-5 токсичных (7 дн.)

1. Иван Иванов 😠 — 35
2. Петр Петров ⚠️ — 25
3. Анна Сидорова ⚠️ — 20
4. Мария Козлова 😐 — 15
5. Василий Смирнов 😐 — 10
```

---

### Сценарий 5: Авто-уведомление

**Пользователь пишет токсичное сообщение:**
```
ЗАТКНИСЬ УЖЕ НАКОНЕЦ!!! ТУПОЙ!!!
```

**Бот автоматически:**
1. ✅ Анализирует токсичность (85/100)
2. ✅ Удаляет сообщение (если настроено)
3. ✅ Уведомляет админа:
   ```
   ⚠️ Токсичное сообщение!

   Пользователь: Иван Иванов
   ID: 123456789
   Квартира: 45
   Toxicity Score: 85/100

   Проверьте через /toxic_stats 123456789
   ```

---

## 🗄️ База данных

### Поля в `users`:
```sql
ALTER TABLE users ADD COLUMN toxicity_score INTEGER DEFAULT 0
ALTER TABLE users ADD COLUMN toxic_messages_count INTEGER DEFAULT 0
ALTER TABLE users ADD COLUMN complaints_count INTEGER DEFAULT 0
```

---

## 🧪 Тестирование

### Чек-лист проверки:

#### 1. Топ токсичных
```bash
# Админ:
/toxic_top 7 10
```
- [ ] Топ отображается
- [ ] Уровни с emoji
- [ ] Статистика верная

#### 2. Статистика пользователя
```bash
/toxic_stats 123456789
```
- [ ] Статистика отображается
- [ ] Категории показаны

#### 3. Жалоба
```bash
/complaint 123456789 Тест
```
- [ ] Жалоба принята
- [ ] Счётчик увеличен
- [ ] При 3+ жалобах уведомление

#### 4. Авто-анализ
```bash
# Отправить токсичное сообщение
```
- [ ] Score считается
- [ ] Админ уведомлён при >50

---

## 📁 Изменённые файлы

| Файл | Изменения |
|------|-----------|
| `database/models.py` | Поля toxicity_score, toxic_messages_count, complaints_count |
| `database/migrate_add_toxicity.py` | Миграция БД |
| `services/toxicity_detector.py` | Сервис детекта |
| `handlers/toxicity.py` | Хендлеры |
| `handlers/chat_monitor.py` | Авто-анализ токсичности |
| `handlers/__init__.py` | Импорт toxicity_router |
| `main.py` | Регистрация toxicity_router |

---

## 🚀 Как использовать

### Для админа:

1. **Посмотреть топ токсичных:**
   ```
   /toxic_top
   ```

2. **Проверить пользователя:**
   ```
   /toxic_stats 123456789
   ```

3. **Подать жалобу:**
   ```
   /complaint 123456789 Оскорбления
   ```

4. **Сбросить токсичность:**
   ```
   /clear_toxicity 123456789
   ```

---

## 💡 Советы

### Настройка порогов:

В `services/toxicity_detector.py`:
```python
'insults': ['дурак', 'идиот', ...],  # Добавьте свои слова
```

### Ложные срабатывания:

- **Шутки между соседями** — могут попасть под детект
- **Цитирование** — слова в кавычках тоже считаются
- **Иностранные слова** — могут совпадать с русскими

### Когда банить:

- ✅ Score > 70 + много жалоб
- ✅ Повторные нарушения после предупреждений
- ✅ Угрозы расправы

---

## 🔧 Отладка

### Посмотреть токсичность в БД:
```bash
cd /home/matrixhasyou/domovoy_bot
source venv/bin/activate
sqlite3 database/domovoy.db

SELECT user_id, toxicity_score, toxic_messages_count, complaints_count
FROM users
WHERE toxicity_score > 0
ORDER BY toxicity_score DESC;
```

### Логи:
```bash
tail -f logs/bot.log | grep -i "токсич\|toxic"
```

---

## ✅ Преимущества

| Было | Стало |
|------|-------|
| Токсичные сообщения в чате | **Авто-детект** |
| Жалобы вручную | **/complaint + уведомления** |
| Нет статистики | **Топ токсичных** |
| Субъективная оценка | **Toxicity Score 0-100** |

---

**Рейтинг токсичности готов! 😠**

*Следующий шаг: тестирование на тестовой группе и фиксация версии v1.9*
