✅ Регистрация и верификация жильцов ✅ Рейтинг активности (уровни) ✅ Детект шпионов (Score 0-100) ✅ Анти-мат система (3 предупреждения → бан) ✅ Админ-панель с рассылкой ✅ Учёт квартир (несколько жильцов) ✅ Телефоны экстренных служб и мастеров ✅ Еженедельный экспорт JSON ✅ Прокси (socks5) для обхода РКН Бекап: backups/versions/v1.0_mvp_2026-02-26/ Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
9.5 KiB
9.5 KiB
📋 История версий профиля — 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: Детект шпиона по истории
Админ видит подозрительную активность:
-
Проверяет историю:
/history 123456789 -
Видит что пользователь сменил:
- Никнейм 5 раз за неделю
- Имя 3 раза
- Квартиру 2 раза
-
Делает вывод:
- Подозрительная активность
- Возможно шпион меняет данные чтобы скрыться
- Проверяет через
/spies
🗄️ База данных
Таблица profile_history:
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. История пользователя
# Админ:
/history 123456789
- История отображается
- Даты верные
- Старые/новые значения показаны
2. Все изменения
/all_history 7 50
- Изменения за период показаны
- Группировка по пользователям
3. История поля
/field_history apartment 7
- Только изменения квартиры
- За 7 дней
4. Статистика
/history_stats
- Общее количество
- По полям распределено
5. Авто-логирование
# Пользователь меняет ник
# Бот должен записать в историю
- Изменение записано
- В логах есть запись
📁 Изменённые файлы
| Файл | Изменения |
|---|---|
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 |
🚀 Как использовать
Для админа:
-
Посмотреть историю пользователя:
/history 123456789 -
Посмотреть все изменения:
/all_history 7 -
Проверить изменения квартиры:
/field_history apartment 30 -
Посмотреть статистику:
/history_stats
💡 Советы
Когда использовать:
- ✅ Подозрение на шпиона — проверяет историю изменений
- ✅ Смена квартиры — кто и когда менял
- ✅ Детект мультиаккаунтов — одинаковые изменения у разных аккаунтов
- ✅ Аудит — кто что менял
Ложные срабатывания:
- Пользователь сменил ник — нормальное явление
- Telegram обновил имя — может меняться автоматически
- Админ исправил ошибку — запись в истории будет
Настройка логирования:
В handlers/chat_monitor.py:
# Добавить свои поля для логирования
if user.apartment != new_apartment:
changes.append(('apartment', user.apartment, new_apartment))
🔧 Отладка
Посмотреть историю в БД:
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;
Логи:
tail -f logs/bot.log | grep -i "Profile change"
✅ Преимущества
| Было | Стало |
|---|---|
| Не видно кто менял данные | Полная история |
| Нет детекта изменений | Авто-логирование |
| Не понятно когда сменил | Даты и время |
| Нет статистики | /history_stats |
История профиля готова! 📋
Следующий шаг: тестирование на тестовой группе и фиксация версии v1.10