Files
new_lottery_bot/ADMIN_PANEL_STRUCTURE.md
Andrew K. Choi 0fdf01d1c7 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
2025-11-17 07:50:08 +09:00

149 lines
8.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Структура Админ Панели
## Главное меню бота
### Для всех пользователей:
- **🎲 Активные розыгрыши** (`active_lotteries`) - Просмотр всех активных розыгрышей
- **📝 Зарегистрироваться** (`start_registration`) - Регистрация в системе (скрывается для зарегистрированных и админов)
### Для администраторов:
- **⚙️ Админ панель** (`admin_panel`) - Вход в админ панель
- ** Создать розыгрыш** (`create_lottery`) - Быстрое создание розыгрыша
---
## Админ панель (`admin_panel`)
### Основные разделы:
#### 1. 🎲 Управление розыгрышами (`admin_lotteries`)
Раздел для полного управления розыгрышами.
**Доступные действия:**
- ** Создать розыгрыш** (`admin_create_lottery`) - Создание нового розыгрыша (пошаговый процесс)
- **📝 Редактировать розыгрыш** (`admin_edit_lottery`) - Редактирование существующих розыгрышей
- **🎭 Настройка отображения победителей** (`admin_winner_display_settings`) - Настройка способа отображения победителей (номер счета/имя)
- **📋 Список всех розыгрышей** (`admin_list_all_lotteries`) - Просмотр всех розыгрышей (активные и завершенные)
- **🏁 Завершить розыгрыш** (`admin_finish_lottery`) - Принудительное завершение розыгрыша
- **🗑️ Удалить розыгрыш** (`admin_delete_lottery`) - Удаление розыгрыша из системы
**Состояния (FSM):**
- `lottery_title` - Ввод названия розыгрыша
- `lottery_description` - Ввод описания
- `lottery_prizes` - Ввод списка призов
- `lottery_confirm` - Подтверждение создания
---
#### 2. 👥 Управление участниками (`admin_participants`)
Раздел для управления участниками розыгрышей.
**Доступные действия:**
- ** Добавить участника** (`admin_add_participant`) - Добавление одного участника вручную
- **📥 Массовое добавление (ID)** (`admin_bulk_add_participant`) - Массовое добавление по Telegram ID
- **🏦 Массовое добавление (счета)** (`admin_bulk_add_accounts`) - Массовое добавление по номерам счетов
- ** Удалить участника** (`admin_remove_participant`) - Удаление одного участника
- **📤 Массовое удаление (ID)** (`admin_bulk_remove_participant`) - Массовое удаление по Telegram ID
- **🏦 Массовое удаление (счета)** (`admin_bulk_remove_accounts`) - Массовое удаление по номерам счетов
- **👥 Все участники** (`admin_list_all_participants`) - Список всех зарегистрированных участников
- **🔍 Поиск участников** (`admin_search_participants`) - Поиск участников по критериям
- **📊 Участники по розыгрышам** (`admin_participants_by_lottery`) - Просмотр участников конкретного розыгрыша
- **📈 Отчет по участникам** (`admin_participants_report`) - Детальный отчет об участии
**Состояния (FSM):**
- `add_participant_lottery` - Выбор розыгрыша для добавления
- `add_participant_user` - Выбор пользователя
- `add_participant_bulk` - Массовый ввод ID
- `add_participant_bulk_accounts` - Массовый ввод счетов
- `remove_participant_lottery` - Выбор розыгрыша для удаления
- `remove_participant_user` - Выбор пользователя для удаления
- `participant_search` - Поиск участников
---
#### 3. 👑 Управление победителями (`admin_winners`)
Раздел для управления победителями розыгрышей.
**Доступные действия:**
- **👑 Установить победителя** (`admin_set_manual_winner`) - Ручная установка победителя (без розыгрыша)
- **📝 Изменить победителя** (`admin_edit_winner`) - Изменение данных победителя
- **❌ Удалить победителя** (`admin_remove_winner`) - Удаление победителя
- **📋 Список победителей** (`admin_list_winners`) - Просмотр всех победителей
- **🎲 Провести розыгрыш** (`admin_conduct_draw`) - Автоматическое проведение розыгрыша
**Состояния (FSM):**
- `set_winner_lottery` - Выбор розыгрыша для установки победителя
- `set_winner_place` - Выбор места (1, 2, 3...)
- `set_winner_user` - Выбор пользователя-победителя
---
#### 4. 📊 Статистика (`admin_stats`)
Раздел с общей статистикой системы.
**Показывает:**
- Количество пользователей
- Количество зарегистрированных пользователей
- Общее количество розыгрышей
- Количество активных розыгрышей
- Количество завершенных розыгрышей
- Общее количество участий
**Кнопки:**
- **🔄 Обновить** (`admin_stats`) - Обновление статистики
- **🔙 Назад** (`admin_panel`) - Возврат в главное меню админ панели
---
#### 5. ⚙️ Настройки (`admin_settings`)
Раздел с настройками системы и утилитами.
**Доступные действия:**
- Настройки отображения
- Управление базой данных
- Экспорт данных
- Системные настройки
---
## Навигация
### Кнопки возврата:
- **🔙 Назад** (`admin_panel`) - Возврат в главное меню админ панели
- **🔙 Назад** (`back_to_main`) - Возврат в главное меню бота
### Кнопки отмены:
- **❌ Отмена** - Отмена текущей операции и возврат в предыдущее меню
---
## Обработка callback'ов
### Главный роутер (`main.py`):
- `admin_panel` - Открытие админ панели (через контроллер)
- `back_to_main` - Возврат в главное меню
### Админ роутер (`admin_panel.py`):
- Все callback'и начинающиеся с `admin_*`
- Вся логика управления розыгрышами, участниками, победителями
- FSM состояния для многошаговых операций
### Порядок подключения роутеров:
1. **router** (main) - команды `/start`, `/help`, основные callback'и
2. **admin_router** - все админские операции
3. **registration_router** - регистрация пользователей
4. **chat_router** (ПОСЛЕДНИЙ) - обработка всех необработанных сообщений
---
## Проверка прав доступа
Все админские handler'ы проверяют права доступа:
```python
if not is_admin(callback.from_user.id):
await callback.answer("❌ Недостаточно прав", show_alert=True)
return
```
ID администраторов хранятся в `src/core/config.py` в переменной `ADMIN_IDS`.