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

353 lines
9.5 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.10
**Версия:** v1.10
**Дата:** 26 февраля 2026 г.
**Статус:** ✅ Реализовано
---
## 📋 Описание
Система логирования изменений профиля пользователя. Бот автоматически отслеживает изменения никнейма, имени, фамилии, квартиры, телефона. Админ может посмотреть полную историю изменений любого пользователя.
---
## 🎯 Возможности
- ✅ Авто-логирование изменений профиля
- ✅ Отслеживаемые поля: username, first_name, last_name, apartment, phone
- ✅ История изменений с датами
- ✅ Просмотр истории конкретного пользователя
- ✅ Просмотр всех изменений за период
- ✅ История по конкретному полю
- ✅ Статистика изменений
---
## 📱 Команды
### Для администраторов:
| Команда | Описание | Пример |
|---------|----------|--------|
| `/history <user_id> [лимит]` | История профиля пользователя | `/history 123456789 20` |
| `/all_history [дни] [лимит]` | Все изменения за период | `/all_history 7 50` |
| `/field_history <поле> [дни]` | История конкретного поля | `/field_history apartment 7` |
| `/history_stats` | Статистика изменений | `/history_stats` |
---
## 🎯 Отслеживаемые поля
| Поле | Описание | Когда меняется |
|------|----------|----------------|
| **username** | Никнейм (@user) | Пользователь сменил ник |
| **first_name** | Имя | Пользователь сменил имя |
| **last_name** | Фамилия | Пользователь сменил фамилию |
| **apartment** | Квартира | Админ сменил квартиру |
| **phone** | Телефон | Админ сменил телефон |
---
## 🎯 Сценарии использования
### Сценарий 1: История пользователя
**Админ:**
```
/history 123456789
```
**Бот:**
```
📋 История профиля: Иван Иванов (кв. 45)
Показано последних: 5 из 20
1. Никнейм (26.02.2026 15:30)
├─ Было: @ivanov_old
└─ Стало: @ivanov_new
2. Имя (25.02.2026 10:00)
├─ Было: Иван
└─ Стало: Иоанн
3. Квартира (20.02.2026 14:00)
├─ Было: 42
└─ Стало: 45
4. Никнейм (15.02.2026 09:00)
├─ Было: пусто
└─ Стало: @ivanov_old
5. Телефон (10.02.2026 12:00)
├─ Было: пусто
└─ Стало: +7 (999) 123-45-67
```
---
### Сценарий 2: Все изменения за период
**Админ:**
```
/all_history 7 50
```
**Бот:**
```
📋 Все изменения за 7 дн.
Показано: 25 из 50
👤 Иван Иванов (кв. 45) — 3 изм.
└─ Никнейм: @ivanov_old → @ivanov_new
└─ Имя: Иван → Иоанн
└─ Квартира: 42 → 45
👤 Петр Петров (кв. 88) — 2 изм.
└─ Телефон: пусто → +7 (999) 000-00-00
└─ Фамилия: Петров → Петров-Водкин
...
```
---
### Сценарий 3: История квартиры
**Админ:**
```
/field_history apartment 30
```
**Бот:**
```
📋 История поля: Квартира
За 30 дн. (15 изм.)
1. Иван Иванов (кв. 45) — 26.02.2026 14:00
└─ 42 → 45
2. Петр Петров (кв. 88) — 25.02.2026 10:00
└─ пусто → 88
3. Анна Сидорова (кв. 12) — 20.02.2026 15:00
└─ 10 → 12
```
---
### Сценарий 4: Статистика
**Админ:**
```
/history_stats
```
**Бот:**
```
📊 Статистика истории профиля
Всего записей: 500
За последние 7 дней: 50
📁 По полям:
• Никнейм: 200
• Имя: 150
• Фамилия: 80
• Квартира: 50
• Телефон: 20
```
---
### Сценарий 5: Детект шпиона по истории
**Админ видит подозрительную активность:**
1. **Проверяет историю:**
```
/history 123456789
```
2. **Видит что пользователь сменил:**
- Никнейм 5 раз за неделю
- Имя 3 раза
- Квартиру 2 раза
3. **Делает вывод:**
- Подозрительная активность
- Возможно шпион меняет данные чтобы скрыться
- Проверяет через `/spies`
---
## 🗄️ База данных
### Таблица `profile_history`:
```sql
CREATE TABLE profile_history (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id BIGINT NOT NULL,
field_name TEXT NOT NULL, -- username, first_name, last_name...
old_value TEXT, -- Старое значение
new_value TEXT, -- Новое значение
changed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(user_id)
)
```
### Индексы:
- `ix_profile_history_user` — по пользователю
- `ix_profile_history_field` — по полю
- `ix_profile_history_time` — по времени
---
## 🧪 Тестирование
### Чек-лист проверки:
#### 1. История пользователя
```bash
# Админ:
/history 123456789
```
- [ ] История отображается
- [ ] Даты верные
- [ ] Старые/новые значения показаны
#### 2. Все изменения
```bash
/all_history 7 50
```
- [ ] Изменения за период показаны
- [ ] Группировка по пользователям
#### 3. История поля
```bash
/field_history apartment 7
```
- [ ] Только изменения квартиры
- [ ] За 7 дней
#### 4. Статистика
```bash
/history_stats
```
- [ ] Общее количество
- [ ] По полям распределено
#### 5. Авто-логирование
```bash
# Пользователь меняет ник
# Бот должен записать в историю
```
- [ ] Изменение записано
- [ ] В логах есть запись
---
## 📁 Изменённые файлы
| Файл | Изменения |
|------|-----------|
| `database/models.py` | Модель ProfileHistory |
| `database/migrate_add_profile_history.py` | Миграция БД |
| `handlers/profile_history.py` | Хендлеры истории |
| `handlers/chat_monitor.py` | Авто-логирование изменений |
| `handlers/__init__.py` | Импорт profile_history_router |
| `main.py` | Регистрация profile_history_router |
---
## 🚀 Как использовать
### Для админа:
1. **Посмотреть историю пользователя:**
```
/history 123456789
```
2. **Посмотреть все изменения:**
```
/all_history 7
```
3. **Проверить изменения квартиры:**
```
/field_history apartment 30
```
4. **Посмотреть статистику:**
```
/history_stats
```
---
## 💡 Советы
### Когда использовать:
-**Подозрение на шпиона** — проверяет историю изменений
-**Смена квартиры** — кто и когда менял
-**Детект мультиаккаунтов** — одинаковые изменения у разных аккаунтов
-**Аудит** — кто что менял
### Ложные срабатывания:
- **Пользователь сменил ник** — нормальное явление
- **Telegram обновил имя** — может меняться автоматически
- **Админ исправил ошибку** — запись в истории будет
### Настройка логирования:
В `handlers/chat_monitor.py`:
```python
# Добавить свои поля для логирования
if user.apartment != new_apartment:
changes.append(('apartment', user.apartment, new_apartment))
```
---
## 🔧 Отладка
### Посмотреть историю в БД:
```bash
cd /home/matrixhasyou/domovoy_bot
source venv/bin/activate
sqlite3 database/domovoy.db
SELECT user_id, field_name, old_value, new_value, changed_at
FROM profile_history
ORDER BY changed_at DESC
LIMIT 20;
```
### Логи:
```bash
tail -f logs/bot.log | grep -i "Profile change"
```
---
## ✅ Преимущества
| Было | Стало |
|------|-------|
| Не видно кто менял данные | **Полная история** |
| Нет детекта изменений | **Авто-логирование** |
| Не понятно когда сменил | **Даты и время** |
| Нет статистики | **/history_stats** |
---
**История профиля готова! 📋**
*Следующий шаг: тестирование на тестовой группе и фиксация версии v1.10*