✅ Регистрация и верификация жильцов ✅ Рейтинг активности (уровни) ✅ Детект шпионов (Score 0-100) ✅ Анти-мат система (3 предупреждения → бан) ✅ Админ-панель с рассылкой ✅ Учёт квартир (несколько жильцов) ✅ Телефоны экстренных служб и мастеров ✅ Еженедельный экспорт JSON ✅ Прокси (socks5) для обхода РКН Бекап: backups/versions/v1.0_mvp_2026-02-26/ Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
353 lines
9.5 KiB
Markdown
353 lines
9.5 KiB
Markdown
# 📋 История версий профиля — 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*
|