feat: Система автоматического подтверждения выигрышей с поддержкой множественных счетов
Some checks reported errors
continuous-integration/drone/push Build encountered an error

Основные изменения:

 Новые функции:
- Система регистрации пользователей с множественными счетами
- Автоматическое подтверждение выигрышей через inline-кнопки
- Механизм переигровки для неподтвержденных выигрышей (24 часа)
- Подтверждение на уровне счетов (каждый счет подтверждается отдельно)
- Скрипт полной очистки базы данных

🔧 Технические улучшения:
- Исправлена ошибка MissingGreenlet при lazy loading (добавлен joinedload/selectinload)
- Добавлено поле claimed_at для отслеживания времени подтверждения
- Пакетное добавление счетов с выбором розыгрыша
- Проверка владения конкретным счетом при подтверждении

📚 Документация:
- docs/AUTO_CONFIRM_SYSTEM.md - Полная документация системы подтверждения
- docs/ACCOUNT_BASED_CONFIRMATION.md - Подтверждение на уровне счетов
- docs/REGISTRATION_SYSTEM.md - Система регистрации
- docs/ADMIN_COMMANDS.md - Команды администратора
- docs/CLEAR_DATABASE.md - Очистка БД
- docs/QUICK_GUIDE.md - Быстрое начало
- docs/UPDATE_LOG.md - Журнал обновлений

🗄️ База данных:
- Миграция 003: Таблицы accounts, winner_verifications
- Миграция 004: Поле claimed_at в таблице winners
- Скрипт scripts/clear_database.py для полной очистки

🎮 Новые команды:
Админские:
- /check_unclaimed <lottery_id> - Проверка неподтвержденных выигрышей
- /redraw <lottery_id> - Повторный розыгрыш
- /add_accounts - Пакетное добавление счетов
- /list_accounts <telegram_id> - Список счетов пользователя

Пользовательские:
- /register - Регистрация с вводом данных
- /my_account - Просмотр своих счетов
- Callback confirm_win_{id} - Подтверждение выигрыша

🛠️ Makefile:
- make clear-db - Очистка всех данных из БД (с подтверждением)

🔒 Безопасность:
- Проверка владения счетом при подтверждении
- Защита от подтверждения чужих счетов
- Независимое подтверждение каждого выигрышного счета

📊 Логика работы:
1. Пользователь регистрируется и добавляет счета
2. Счета участвуют в розыгрыше
3. Победители получают уведомление с кнопкой подтверждения
4. Каждый счет подтверждается отдельно (24 часа на подтверждение)
5. Неподтвержденные выигрыши переигрываются через /redraw
This commit is contained in:
2025-11-16 14:01:30 +09:00
parent 31c4c5382a
commit 505d26f0e9
21 changed files with 4217 additions and 68 deletions

152
docs/QUICK_GUIDE.md Normal file
View File

@@ -0,0 +1,152 @@
# Быстрая шпаргалка - Команды администратора
## 🚀 Основные команды
### Добавление счетов
**Один счет (быстро):**
```
/add_account 2223 11-22-33-44-55-66-77
```
**Несколько счетов (пакетом):**
```
/add_account
2223 11-22-33-44-55-66-77
2223 88-99-00-11-22-33-44
3334 12-34-56-78-90-12-34
```
### Управление счетами
```
/remove_account 11-22-33-44-55-66-77 # Деактивировать
/user_info 2223 # Информация о пользователе
```
### Работа с розыгрышами
```
/winner_status 1 # Статус победителей
/verify_winner AB12CD34 1 # Подтвердить выигрыш
```
---
## 📋 Типичные сценарии
### Новый клиент (полный цикл)
1. Клиент регистрируется: `/start` → "Зарегистрироваться"
2. Админ добавляет счета:
```
/add_account 2223 11-22-33-44-55-66-77
```
3. Выбрать розыгрыш из списка
4. Готово!
### Массовое добавление (10+ счетов)
```
/add_account
2223 11-22-33-44-55-66-77
2223 22-33-44-55-66-77-88
3334 33-44-55-66-77-88-99
3334 44-55-66-77-88-99-00
5556 55-66-77-88-99-00-11
```
→ Выбрать розыгрыш → Готово!
### Проведение розыгрыша
1. В боте: "Розыгрыши" → Выбрать → "Провести розыгрыш"
2. Победители получат уведомления автоматически
3. Проверить: `/winner_status 1`
### Подтверждение победителя
1. Победитель сообщает код: `AB12CD34`
2. Админ: `/verify_winner AB12CD34 1`
3. Система подтверждает и уведомляет победителя
---
## 💡 Полезные советы
- **Формат счета:** `XX-XX-XX-XX-XX-XX-XX` (7 пар цифр)
- **Клубная карта:** Любые цифры (например: 2223, 5556)
- **Код верификации:** Генерируется автоматически при регистрации
- **Отмена операции:** `/cancel` во время ввода данных
---
## ⚠️ Частые ошибки
| Ошибка | Причина | Решение |
|--------|---------|---------|
| "Пользователь не найден" | Клубная карта не зарегистрирована | Попросить зарегистрироваться через /start |
| "Счет уже существует" | Номер занят другим пользователем | Проверить номер или деактивировать старый |
| "Неверный формат" | Формат счета неправильный | Использовать XX-XX-XX-XX-XX-XX-XX |
| Нет розыгрышей | Нет активных розыгрышей | Создать розыгрыш через админ-панель |
---
## 🔍 Проверка данных
### Проверить пользователя:
```
/user_info 2223
```
Увидите:
- Все счета пользователя
- Код верификации
- Историю выигрышей
### Проверить победителей:
```
/winner_status 1
```
Увидите:
- Список всех победителей
- Статус подтверждения (✅/⏳)
- Информацию о владельцах
---
## 📞 Пользовательские команды
Клиенты используют:
- `/start` - Главное меню / регистрация
- `/my_code` - Показать код верификации
- `/my_accounts` - Список счетов
- "Мой счет" (через меню) - Подробная информация
---
## 🎯 Быстрый старт (за 1 минуту)
```bash
# 1. Клиент регистрируется
Клиент → /start → "Зарегистрироваться" → Вводит данные
# 2. Админ добавляет счета
/add_account
2223 11-22-33-44-55-66-77
2223 88-99-00-11-22-33-44
# 3. Выбрать розыгрыш
Нажать "🎯 Новогодний розыгрыш"
# 4. Провести розыгрыш
"Розыгрыши" → Выбрать → "Провести"
# 5. Подтвердить победителя
/verify_winner AB12CD34 1
✅ Готово!
```