feat: update admin panel keyboard structure and registration button logic

- Updated admin panel keyboard to match admin_panel.py handlers
- Changed registration button logic: show only for unregistered non-admins
- Added missing methods to IBotController interface
- Updated get_main_keyboard to accept is_registered parameter
- Simplified admin panel structure with proper callback routing
- Removed test callback button from production UI
- Created ADMIN_PANEL_STRUCTURE.md and ADMIN_PANEL_TESTING.md documentation
This commit is contained in:
2025-11-17 07:50:08 +09:00
parent 0dc0ae8111
commit 0fdf01d1c7
8 changed files with 582 additions and 33 deletions

331
ADMIN_PANEL_TESTING.md Normal file
View File

@@ -0,0 +1,331 @@
# Тестирование Админ Панели
## Контрольный список для проверки кнопок
### ✅ Главное меню (для обычных пользователей)
- [ ] 🎲 Активные розыгрыши - показывает список активных розыгрышей
- [ ] 📝 Зарегистрироваться - открывает форму регистрации (только для незарегистрированных)
- [ ] Кнопка регистрации СКРЫТА для зарегистрированных пользователей
- [ ] Кнопка регистрации СКРЫТА для администраторов
### ✅ Главное меню (для администраторов)
- [ ] 🎲 Активные розыгрыши - показывает список активных розыгрышей
- [ ] ⚙️ Админ панель - открывает админ панель
- [ ] Создать розыгрыш - быстрое создание розыгрыша
---
## ✅ Админ панель - Главное меню
### Проверка открытия админ панели:
- [ ] Показывается краткая статистика (пользователи, розыгрыши, участия)
- [ ] Все 6 кнопок отображаются корректно
### Основные кнопки:
- [ ] 🎲 Управление розыгрышами (`admin_lotteries`)
- [ ] 👥 Управление участниками (`admin_participants`)
- [ ] 👑 Управление победителями (`admin_winners`)
- [ ] 📊 Статистика (`admin_stats`)
- [ ] ⚙️ Настройки (`admin_settings`)
- [ ] 🔙 Назад - возврат в главное меню бота
---
## ✅ Раздел: Управление розыгрышами
### Открытие раздела:
- [ ] Нажать "🎲 Управление розыгрышами" в админ панели
- [ ] Проверить отображение всех 7 кнопок
### Кнопки раздела:
- [ ] Создать розыгрыш
- [ ] Запускается процесс создания (FSM)
- [ ] Шаг 1: Ввод названия
- [ ] Шаг 2: Ввод описания
- [ ] Шаг 3: Ввод призов (через запятую)
- [ ] Шаг 4: Подтверждение
- [ ] Розыгрыш создается в БД
- [ ] Кнопка "❌ Отмена" работает на каждом шаге
- [ ] 📝 Редактировать розыгрыш
- [ ] Показывает список всех розыгрышей
- [ ] Выбор розыгрыша открывает меню редактирования
- [ ] Можно изменить название, описание, призы
- [ ] Изменения сохраняются в БД
- [ ] 🎭 Настройка отображения победителей
- [ ] Показывает список розыгрышей
- [ ] Для каждого розыгрыша можно выбрать тип отображения:
- [ ] По номеру счета
- [ ] По имени пользователя
- [ ] Настройка сохраняется
- [ ] 📋 Список всех розыгрышей
- [ ] Показывает все розыгрыши (активные и завершенные)
- [ ] Для каждого розыгрыша показывается:
- [ ] Название
- [ ] Статус (активный/завершенный)
- [ ] Количество участников
- [ ] Дата создания
- [ ] 🏁 Завершить розыгрыш
- [ ] Показывает список активных розыгрышей
- [ ] Выбор розыгрыша завершает его
- [ ] Запрос подтверждения
- [ ] Статус меняется в БД
- [ ] 🗑️ Удалить розыгрыш
- [ ] Показывает список всех розыгрышей
- [ ] Выбор розыгрыша запрашивает подтверждение
- [ ] Розыгрыш удаляется из БД
- [ ] 🔙 Назад - возврат в главное меню админ панели
---
## ✅ Раздел: Управление участниками
### Открытие раздела:
- [ ] Нажать "👥 Управление участниками" в админ панели
- [ ] Проверить отображение всех 9 кнопок
### Кнопки раздела:
- [ ] Добавить участника
- [ ] Выбор розыгрыша
- [ ] Выбор пользователя (по ID или имени)
- [ ] Участник добавляется в розыгрыш
- [ ] Проверка дубликатов
- [ ] 📥 Массовое добавление (ID)
- [ ] Выбор розыгрыша
- [ ] Ввод списка Telegram ID (через запятую или построчно)
- [ ] Массовое добавление участников
- [ ] Отчет об успешных/неудачных добавлениях
- [ ] 🏦 Массовое добавление (счета)
- [ ] Выбор розыгрыша
- [ ] Ввод списка номеров счетов
- [ ] Участники добавляются по номерам счетов
- [ ] Отчет об операции
- [ ] Удалить участника
- [ ] Выбор розыгрыша
- [ ] Выбор участника
- [ ] Участник удаляется
- [ ] Подтверждение удаления
- [ ] 📤 Массовое удаление (ID)
- [ ] Выбор розыгрыша
- [ ] Ввод списка ID для удаления
- [ ] Массовое удаление
- [ ] Отчет об операции
- [ ] 🏦 Массовое удаление (счета)
- [ ] Выбор розыгрыша
- [ ] Ввод списка номеров счетов
- [ ] Удаление по счетам
- [ ] Отчет об операции
- [ ] 👥 Все участники
- [ ] Показывает список всех зарегистрированных пользователей
- [ ] Пагинация (если много)
- [ ] Показывает ID, имя, статус регистрации
- [ ] 🔍 Поиск участников
- [ ] Поиск по имени
- [ ] Поиск по Telegram ID
- [ ] Поиск по номеру счета
- [ ] Показывает результаты поиска
- [ ] 📊 Участники по розыгрышам
- [ ] Выбор розыгрыша
- [ ] Показывает всех участников розыгрыша
- [ ] Количество участников
- [ ] Список с именами/ID/счетами
- [ ] 📈 Отчет по участникам
- [ ] Детальная статистика по участиям
- [ ] Топ участников (по количеству участий)
- [ ] Распределение по розыгрышам
- [ ] 🔙 Назад - возврат в главное меню админ панели
---
## ✅ Раздел: Управление победителями
### Открытие раздела:
- [ ] Нажать "👑 Управление победителями" в админ панели
- [ ] Проверить отображение всех 6 кнопок
### Кнопки раздела:
- [ ] 👑 Установить победителя
- [ ] Выбор розыгрыша
- [ ] Выбор места (1, 2, 3...)
- [ ] Выбор пользователя вручную
- [ ] Победитель сохраняется в БД
- [ ] 📝 Изменить победителя
- [ ] Показывает список розыгрышей с победителями
- [ ] Выбор победителя для изменения
- [ ] Возможность изменить место или пользователя
- [ ] Изменения сохраняются
- [ ] ❌ Удалить победителя
- [ ] Показывает список победителей
- [ ] Выбор победителя
- [ ] Подтверждение удаления
- [ ] Победитель удаляется из БД
- [ ] 📋 Список победителей
- [ ] Показывает всех победителей всех розыгрышей
- [ ] Группировка по розыгрышам
- [ ] Место, имя/счет, приз
- [ ] 🎲 Провести розыгрыш
- [ ] Выбор розыгрыша
- [ ] Автоматическое определение победителей
- [ ] Случайный выбор из участников
- [ ] Сохранение результатов
- [ ] Уведомление победителей
- [ ] 🔙 Назад - возврат в главное меню админ панели
---
## ✅ Раздел: Статистика
### Открытие раздела:
- [ ] Нажать "📊 Статистика" в админ панели
- [ ] Проверить отображение статистики
### Показываемые данные:
- [ ] 👥 Всего пользователей: [число]
- [ ] ✅ Зарегистрированных: [число]
- [ ] 🎲 Всего розыгрышей: [число]
- [ ] 🟢 Активных: [число]
- [ ] ✅ Завершенных: [число]
- [ ] 🎫 Участий: [число]
### Кнопки:
- [ ] 🔄 Обновить - обновляет статистику
- [ ] 🔙 Назад - возврат в админ панель
---
## ✅ Раздел: Настройки
### Открытие раздела:
- [ ] Нажать "⚙️ Настройки" в админ панели
- [ ] Проверить доступность настроек
### Возможности (зависит от реализации):
- [ ] Настройки уведомлений
- [ ] Экспорт данных
- [ ] Очистка старых данных
- [ ] Управление администраторами
- [ ] Системные настройки
- [ ] 🔙 Назад - возврат в админ панель
---
## ✅ Проверка прав доступа
### Для обычных пользователей:
- [ ] Кнопка "Админ панель" НЕ показывается
- [ ] Попытка прямого вызова admin callback'ов возвращает "❌ Недостаточно прав"
### Для администраторов:
- [ ] Все разделы доступны
- [ ] Все операции выполняются
- [ ] Статистика отображается корректно
---
## ✅ Проверка навигации
### Возврат назад:
- [ ] Из каждого подраздела можно вернуться в админ панель
- [ ] Из админ панели можно вернуться в главное меню
- [ ] Кнопки отмены работают во всех FSM состояниях
### Breadcrumbs (последовательность):
1. Главное меню бота
2. → Админ панель
3. → → Конкретный раздел (розыгрыши/участники/победители)
4. → → → Подменю раздела (если есть)
---
## 🐛 Известные проблемы и их решения
### Проблема: Кнопка не реагирует
**Решение:**
1. Проверить логи бота: `tail -f /tmp/bot_single.log`
2. Убедиться, что callback_data зарегистрирован в роутере
3. Проверить порядок подключения роутеров
### Проблема: FSM не сохраняет состояние
**Решение:**
1. Убедиться, что storage настроен (MemoryStorage)
2. Проверить вызов `state.set_state()`
3. Проверить StateFilter в handler'ах
### Проблема: "Недостаточно прав" для админа
**Решение:**
1. Проверить, что ID админа в `ADMIN_IDS` (config.py)
2. Проверить формат ID (должен быть int)
---
## 📝 Инструкция по тестированию
### Шаг 1: Подготовка
1. Запустить бота: `make bot-start`
2. Открыть чат с ботом в Telegram
3. Убедиться, что у вас админские права
### Шаг 2: Тестирование главного меню
1. Отправить `/start`
2. Проверить все кнопки главного меню
3. Проверить кнопку "Админ панель"
### Шаг 3: Тестирование админ панели
1. Открыть админ панель
2. Последовательно зайти в каждый раздел
3. Проверить все кнопки в каждом разделе
4. Отметить работающие кнопки в чеклисте
### Шаг 4: Тестирование FSM процессов
1. Создать новый розыгрыш (полный цикл)
2. Добавить участников (разными способами)
3. Провести розыгрыш
4. Проверить результаты
### Шаг 5: Проверка навигации
1. Из каждого меню вернуться назад
2. Проверить корректность возврата
3. Убедиться, что нет "мертвых" кнопок
### Шаг 6: Логи
1. Во время тестирования следить за логами
2. Фиксировать все ошибки
3. Проверять успешное выполнение операций
---
## ✅ Результат тестирования
**Дата:** [Указать дату]
**Тестировщик:** [Указать имя]
**Версия бота:** [Указать commit hash]
### Статистика:
- Всего проверено кнопок: ____ / ____
- Работает корректно: ____
- Требует исправления: ____
- Критические ошибки: ____
### Замечания:
[Описать найденные проблемы и рекомендации]