✅ Регистрация и верификация жильцов ✅ Рейтинг активности (уровни) ✅ Детект шпионов (Score 0-100) ✅ Анти-мат система (3 предупреждения → бан) ✅ Админ-панель с рассылкой ✅ Учёт квартир (несколько жильцов) ✅ Телефоны экстренных служб и мастеров ✅ Еженедельный экспорт JSON ✅ Прокси (socks5) для обхода РКН Бекап: backups/versions/v1.0_mvp_2026-02-26/ Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
249 lines
6.2 KiB
Markdown
249 lines
6.2 KiB
Markdown
# 🏆 Система рейтинга пользователей
|
||
|
||
**Дата добавления:** 24 февраля 2026
|
||
**Статус:** ✅ Готово
|
||
|
||
---
|
||
|
||
## 📋 Описание
|
||
|
||
Система рейтинга активности жильцов в чате. Только администраторы могут видеть и управлять рейтингом.
|
||
|
||
---
|
||
|
||
## 🎯 Уровни пользователей
|
||
|
||
| Уровень | Баллы | Иконка |
|
||
|---------|-------|--------|
|
||
| 🌱 Новичок | 0-99 | 🌱 |
|
||
| 🏠 Сосед | 100-499 | 🏠 |
|
||
| ⭐ Активист | 500-999 | ⭐ |
|
||
| 👑 Лидер | 1000+ | 👑 |
|
||
|
||
---
|
||
|
||
## 💰 Начисление баллов
|
||
|
||
**За что начисляются баллы:**
|
||
- 💬 **Сообщение в чате** — +1 балл
|
||
|
||
**Автоматическое обновление:**
|
||
- Уровень обновляется автоматически при изменении рейтинга
|
||
- Баллы начисляются за каждое сообщение в чате
|
||
|
||
---
|
||
|
||
## 🔐 Доступ
|
||
|
||
**Видят рейтинг:**
|
||
- ✅ **Только администраторы**
|
||
|
||
**Где видят:**
|
||
- ✅ **Только в личных сообщениях с ботом**
|
||
- ❌ В общий чат ничего не отправляется
|
||
|
||
---
|
||
|
||
## 📱 Команды для админа
|
||
|
||
### 1. `/rating` или `/рейтинг`
|
||
|
||
**Показать свой рейтинг:**
|
||
```bash
|
||
/rating
|
||
```
|
||
|
||
**Показать рейтинг пользователя по ID:**
|
||
```bash
|
||
/rating 123456789
|
||
```
|
||
|
||
**Показать рейтинг по username:**
|
||
```bash
|
||
/rating @username
|
||
```
|
||
|
||
**Пример ответа:**
|
||
```
|
||
📊 РЕЙТИНГ ПОЛЬЗОВАТЕЛЯ
|
||
|
||
👤 Петр Петров (кв. 88)
|
||
ID: 123456789
|
||
|
||
⭐ Уровень: Активист
|
||
🏆 Рейтинг: 567 баллов
|
||
💬 Сообщений: 543
|
||
📈 До следующего уровня: 433 баллов
|
||
```
|
||
|
||
---
|
||
|
||
### 2. `/top` или `/топ`
|
||
|
||
**Топ-10 пользователей по рейтингу:**
|
||
```bash
|
||
/top
|
||
```
|
||
|
||
**Пример ответа:**
|
||
```
|
||
🏆 ТОП-10 ПО РЕЙТИНГУ
|
||
|
||
🥇 Петр Петров (кв. 88)
|
||
└─ Рейтинг: 567 | Уровень: Активист
|
||
🥈 Анна Иванова (кв. 45)
|
||
└─ Рейтинг: 432 | Уровень: Сосед
|
||
🥉 Иван Сидоров (кв. 12)
|
||
└─ Рейтинг: 298 | Уровень: Сосед
|
||
4. Мария Козлова
|
||
└─ Рейтинг: 156 | Уровень: Сосед
|
||
...
|
||
```
|
||
|
||
---
|
||
|
||
### 3. `/rank` или `/ранг`
|
||
|
||
**Распределение по уровням:**
|
||
```bash
|
||
/rank
|
||
```
|
||
|
||
**Пример ответа:**
|
||
```
|
||
📊 РАСПРЕДЕЛЕНИЕ ПО УРОВНЯМ
|
||
|
||
Всего пользователей: 50
|
||
|
||
👑 Лидер: 2 (4.0%)
|
||
⭐ Активист: 8 (16.0%)
|
||
🏠 Сосед: 25 (50.0%)
|
||
🌱 Новичок: 15 (30.0%)
|
||
|
||
Уровни:
|
||
🌱 Новичок: 0-99 баллов
|
||
🏠 Сосед: 100-499 баллов
|
||
⭐ Активист: 500-999 баллов
|
||
👑 Лидер: 1000+ баллов
|
||
```
|
||
|
||
---
|
||
|
||
## 🖱️ Кнопки в меню админа
|
||
|
||
**Главное меню:**
|
||
- 🏆 **Рейтинг** — показывает Топ-10
|
||
|
||
**Меню рейтинга:**
|
||
- 🏆 **Топ-10** — топ пользователей
|
||
- 📊 **Уровни** — распределение по уровням
|
||
- 🔙 **Назад** — в главное меню
|
||
|
||
---
|
||
|
||
## 🛡️ Защита
|
||
|
||
**Все команды защищены:**
|
||
1. ✅ **Только администраторы** — декоратор `@admin_only`
|
||
2. ✅ **Только в личке** — проверка `message.chat.type != 'private'`
|
||
3. ✅ **В общий чат не отправляется** — уведомление если не в личке
|
||
|
||
**Если не админ пытается:**
|
||
```
|
||
❌ Команда недоступна
|
||
```
|
||
|
||
**Если в чате (не в личке):**
|
||
```
|
||
⚠️ Команда доступна только в личных сообщениях!
|
||
Напишите боту в личку: /top
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 База данных
|
||
|
||
**Новые поля в таблице `users`:**
|
||
- `rating` (INTEGER) — баллы активности, по умолчанию 0
|
||
- `level` (TEXT) — уровень, по умолчанию 'Новичок'
|
||
|
||
**Миграция:**
|
||
```bash
|
||
cd ~/domovoy_bot
|
||
python database/migrate_add_rating.py
|
||
```
|
||
|
||
---
|
||
|
||
## 🧪 Тестирование
|
||
|
||
### Тест 1: Начисление баллов
|
||
|
||
1. Отправь сообщение в чат
|
||
2. Проверь рейтинг через `/rating <твой_ID>`
|
||
3. Ожидай: +1 балл
|
||
|
||
### Тест 2: Топ пользователей
|
||
|
||
1. В личку боту: `/top`
|
||
2. Ожидай: список топ-10
|
||
|
||
### Тест 3: Распределение
|
||
|
||
1. В личку боту: `/rank`
|
||
2. Ожидай: проценты по уровням
|
||
|
||
### Тест 4: Защита в чате
|
||
|
||
1. В общем чате: `/top`
|
||
2. Ожидай: "Команда доступна только в личных сообщениях"
|
||
|
||
### Тест 5: Кнопка Рейтинг
|
||
|
||
1. В личку: `/admin`
|
||
2. Нажми "🏆 Рейтинг"
|
||
3. Ожидай: топ-10 + кнопки "Топ-10", "Уровни"
|
||
|
||
---
|
||
|
||
## 📁 Изменённые файлы
|
||
|
||
| Файл | Изменения |
|
||
|------|-----------|
|
||
| `database/models.py` | Добавлены поля `rating`, `level` |
|
||
| `database/migrate_add_rating.py` | Скрипт миграции |
|
||
| `handlers/chat_monitor.py` | Начисление +1 балл за сообщение |
|
||
| `handlers/admin.py` | Команды `/rating`, `/top`, `/rank` |
|
||
| `keyboards/admin_menu.py` | Кнопка "🏆 Рейтинг" |
|
||
|
||
---
|
||
|
||
## 🚀 Как использовать
|
||
|
||
**Для админа:**
|
||
|
||
1. **Проверить свой рейтинг:**
|
||
```
|
||
/rating
|
||
```
|
||
|
||
2. **Проверить рейтинг жильца:**
|
||
```
|
||
/users # Найти ID
|
||
/rating 123456789
|
||
```
|
||
|
||
3. **Посмотреть топ:**
|
||
```
|
||
/top
|
||
```
|
||
Или через меню: `/admin` → "🏆 Рейтинг"
|
||
|
||
4. **Посмотреть уровни:**
|
||
```
|
||
/rank
|
||
```
|
||
|
||
---
|
||
|
||
**Система рейтинга готова!** 🎉
|