# 🏆 Система рейтинга пользователей

**Дата добавления:** 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
   ```

---

**Система рейтинга готова!** 🎉
