# 🔍 Детект мультиаккаунтов — v1.7

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

---

## 📋 Описание

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

---

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

- ✅ Анализ активности по времени (24 часа)
- ✅ Сравнение паттернов сообщений
- ✅ Проверка схожести пиков активности
- ✅ Выявление пар подозрительных аккаунтов
- ✅ Проверка квартир с несколькими жильцами
- ✅ multicount_score (0-100) для каждого пользователя
- ✅ Команды для админов: `/multicheck`, `/check_apt`, `/multistats`

---

## 📱 Команды

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

| Команда | Описание | Пример |
|---------|----------|--------|
| `/multicheck` | Проверить всех на мультиаккаунты | `/multicheck` |
| `/check_apt <номер>` | Проверить квартиру | `/check_apt 45` |
| `/multistats` | Статистика мультиаккаунтов | `/multistats` |
| `/clear_multiscore <ID>` | Сбросить score | `/clear_multiscore 123456789` |
| `/link_accounts <ID1> <ID2>` | Связать аккаунты (семья) | `/link_accounts 123 456` |

---

## 🎯 Факторы анализа

### 1. Схожесть активности по времени
- Анализируется за последние 24 часа
- Сравнивается распределение сообщений по часам
- **Порог:** 80% схожести → +30 баллов

### 2. Паттерны сообщений
- Длина сообщений (короткие/средние/длинные)
- Наличие ссылок
- Наличие emoji
- Вопросы
- Приветствия
- **Порог:** 70% схожести → +20 баллов

### 3. Время регистрации
- Если зарегистрировались в течение часа → +10 баллов

### 4. Device ID
- Telegram не отдаёт device ID через Bot API
- Зарезервировано на будущее

---

## 🎯 Пороги подозрительности

| Score | Статус | Действие |
|-------|--------|----------|
| 0-30 | 🟢 Норма | Нет действий |
| 31-50 | 🟡 Подозрительно | Пометка в базе |
| 51+ | 🔴 Мультиаккаунт | Уведомление админа |

---

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

### Сценарий 1: Проверка всех пользователей

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

**Бот:**
```
🔍 Анализирую пользователей на мультиаккаунты...

🚨 Обнаружены подозрительные пары (2)

1. Пара #1
   ├─ Иван Иванов (кв. 45)
   └─ Петр Петров (кв. 88)
   └─ Score: 60/100
   └─ Причины: Схожая активность (85%), Схожие паттерны сообщений (75%)

2. Пара #2
   ├─ Анна Сидорова (кв. 12)
   └─ Мария Козлова (кв. 12)
   └─ Score: 50/100
   └─ Причины: Зарегистрировались в течение часа

💡 Для проверки квартиры: /check_apt <номер>
```

---

### Сценарий 2: Проверка квартиры

**Админ:**
```
/check_apt 45
```

**Бот:**
```
🏠 Квартира 45 — 2 жильцов

1. Иван Иванов (@ivanov)
   └─ ID: 123456789
   └─ Верифицирован: ✅
   └─ Сообщений: 150
   └─ Рейтинг: 200

2. Петр Петров (@petrov)
   └─ ID: 987654321
   └─ Верифицирован: ✅
   └─ Сообщений: 145
   └─ Рейтинг: 195

⚠️ Внимание! В квартире 2 человека — это много!

💡 Для детальной проверки: /multicheck
```

---

### Сценарий 3: Статистика

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

**Бот:**
```
📊 Статистика мультиаккаунтов

🔴 Пользователей с подозрительным score: 3

• Иван Иванов (кв. 45) — score: 60
• Петр Петров (кв. 88) — score: 55
• Анна Сидорова (кв. 12) — score: 50

🏠 Квартир с несколькими жильцами: 5

• Кв. 45 — 3 чел.
• Кв. 88 — 2 чел.
• Кв. 12 — 2 чел.
```

---

### Сценарий 4: Сброс score (семья)

**Админ видит что семья (муж и жена) попали под детект:**

**Админ:**
```
/link_accounts 123456789 987654321
```

**Бот:**
```
✅ Аккаунты связаны:
• Иван Иванов (ID: 123456789)
• Анна Иванова (ID: 987654321)

multicount_score сброшен
```

---

### Сценарий 5: Ручной сброс

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

**Бот:**
```
✅ multicount_score пользователя 123456789 сброшен
```

---

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

### Поля в `users`:
```sql
ALTER TABLE users ADD COLUMN multicount_score INTEGER DEFAULT 0
ALTER TABLE users ADD COLUMN suspected_device_id TEXT
ALTER TABLE users ADD COLUMN suspected_alt_accounts TEXT
```

### Индексы:
- `ix_users_multicount_score` — по score (можно добавить)

---

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

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

#### 1. Проверка всех пользователей
```bash
# Админ:
/multicheck
```
- [ ] Анализ запускается
- [ ] Подозрительные пары находятся
- [ ] Score считается правильно

#### 2. Проверка квартиры
```bash
# Админ:
/check_apt 45
```
- [ ] Пользователи в квартире отображаются
- [ ] Информация верная

#### 3. Статистика
```bash
/multistats
```
- [ ] Статистика отображается
- [ ] Квартиры с несколькими считаются

#### 4. Сброс score
```bash
/clear_multiscore <ID>
```
- [ ] Score сбрасывается

#### 5. Связывание аккаунтов
```bash
/link_accounts <ID1> <ID2>
```
- [ ] Аккаунты связываются
- [ ] Score сбрасывается

---

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

| Файл | Изменения |
|------|-----------|
| `database/models.py` | Поля multicount_score, suspected_device_id, suspected_alt_accounts |
| `database/migrate_add_multicount.py` | Миграция БД |
| `services/multicount_detector.py` | Сервис детекта |
| `handlers/multicount.py` | Хендлеры |
| `handlers/__init__.py` | Импорт multicount_router |
| `main.py` | Регистрация multicount_router |

---

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

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

1. **Проверить всех:**
   ```
   /multicheck
   ```

2. **Проверить квартиру:**
   ```
   /check_apt 45
   ```

3. **Посмотреть статистику:**
   ```
   /multistats
   ```

4. **Сбросить score (семья):**
   ```
   /link_accounts 123456789 987654321
   ```

---

## 💡 Советы

### Когда использовать:

- ✅ Подозрение на шпиона УК
- ✅ Несколько аккаунтов от одного человека
- ✅ Накрутка мнения в голосованиях
- ✅ Проверка квартир с несколькими жильцами

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

- ✅ **Семья (муж и жена)** — используйте `/link_accounts`
- ✅ **Соседи по квартире** — нормально если это родственники
- ✅ **Активные жильцы** — могут иметь схожую активность

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

В `services/multicount_detector.py`:
```python
'activity_similarity_threshold': 0.8,  # Порог схожести активности
'message_pattern_threshold': 0.7,  # Порог схожести паттернов
```

---

## 🔧 Отладка

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

SELECT user_id, apartment, multicount_score, suspected_alt_accounts
FROM users
WHERE multicount_score > 0;
```

### Логи:
```bash
tail -f logs/bot.log | grep -i "мульти\|multicount"
```

---

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

| Было | Стало |
|------|-------|
| Нельзя выявить мультиаккаунты | **Анализ паттернов** |
| Нет статистики | **/multistats** |
| Ручная проверка | **Авто-детект** |
| Нет связи аккаунтов | **/link_accounts для семьи** |

---

**Детект мультиаккаунтов готов! 🔍**

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