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:
@@ -8,14 +8,16 @@ from src.core.models import Lottery, Winner
|
||||
class KeyboardBuilderImpl(IKeyboardBuilder):
|
||||
"""Реализация построителя клавиатур"""
|
||||
|
||||
def get_main_keyboard(self, is_admin: bool = False):
|
||||
def get_main_keyboard(self, is_admin: bool = False, is_registered: bool = False):
|
||||
"""Получить главную клавиатуру"""
|
||||
buttons = [
|
||||
[InlineKeyboardButton(text="🎲 Активные розыгрыши", callback_data="active_lotteries")],
|
||||
[InlineKeyboardButton(text="📝 Зарегистрироваться", callback_data="start_registration")],
|
||||
[InlineKeyboardButton(text="🧪 ТЕСТ КОЛБЭК", callback_data="test_callback")]
|
||||
[InlineKeyboardButton(text="🎲 Активные розыгрыши", callback_data="active_lotteries")]
|
||||
]
|
||||
|
||||
# Показываем кнопку регистрации только незарегистрированным пользователям (не админам)
|
||||
if not is_admin and not is_registered:
|
||||
buttons.append([InlineKeyboardButton(text="📝 Зарегистрироваться", callback_data="start_registration")])
|
||||
|
||||
if is_admin:
|
||||
buttons.extend([
|
||||
[InlineKeyboardButton(text="⚙️ Админ панель", callback_data="admin_panel")],
|
||||
@@ -27,18 +29,11 @@ class KeyboardBuilderImpl(IKeyboardBuilder):
|
||||
def get_admin_keyboard(self):
|
||||
"""Получить админскую клавиатуру"""
|
||||
buttons = [
|
||||
[
|
||||
InlineKeyboardButton(text="👥 Пользователи", callback_data="user_management"),
|
||||
InlineKeyboardButton(text="💳 Счета", callback_data="account_management")
|
||||
],
|
||||
[
|
||||
InlineKeyboardButton(text="🎯 Розыгрыши", callback_data="lottery_management"),
|
||||
InlineKeyboardButton(text="💬 Чат", callback_data="chat_management")
|
||||
],
|
||||
[
|
||||
InlineKeyboardButton(text="📊 Статистика", callback_data="stats"),
|
||||
InlineKeyboardButton(text="⚙️ Настройки", callback_data="settings")
|
||||
],
|
||||
[InlineKeyboardButton(text="🎲 Управление розыгрышами", callback_data="admin_lotteries")],
|
||||
[InlineKeyboardButton(text="<EFBFBD> Управление участниками", callback_data="admin_participants")],
|
||||
[InlineKeyboardButton(text="👑 Управление победителями", callback_data="admin_winners")],
|
||||
[InlineKeyboardButton(text="📊 Статистика", callback_data="admin_stats")],
|
||||
[InlineKeyboardButton(text="⚙️ Настройки", callback_data="admin_settings")],
|
||||
[InlineKeyboardButton(text="🔙 Назад", callback_data="back_to_main")]
|
||||
]
|
||||
return InlineKeyboardMarkup(inline_keyboard=buttons)
|
||||
@@ -46,18 +41,12 @@ class KeyboardBuilderImpl(IKeyboardBuilder):
|
||||
def get_lottery_management_keyboard(self):
|
||||
"""Получить клавиатуру управления розыгрышами"""
|
||||
buttons = [
|
||||
[
|
||||
InlineKeyboardButton(text="📋 Все розыгрыши", callback_data="all_lotteries"),
|
||||
InlineKeyboardButton(text="🎲 Активные", callback_data="active_lotteries_admin")
|
||||
],
|
||||
[
|
||||
InlineKeyboardButton(text="✅ Завершенные", callback_data="completed_lotteries"),
|
||||
InlineKeyboardButton(text="➕ Создать", callback_data="create_lottery")
|
||||
],
|
||||
[
|
||||
InlineKeyboardButton(text="🎯 Провести розыгрыш", callback_data="conduct_lottery_admin"),
|
||||
InlineKeyboardButton(text="🔄 Переросыгрыш", callback_data="admin_redraw")
|
||||
],
|
||||
[InlineKeyboardButton(text="➕ Создать розыгрыш", callback_data="admin_create_lottery")],
|
||||
[InlineKeyboardButton(text="📝 Редактировать розыгрыш", callback_data="admin_edit_lottery")],
|
||||
[InlineKeyboardButton(text="🎭 Настройка отображения победителей", callback_data="admin_winner_display_settings")],
|
||||
[InlineKeyboardButton(text="📋 Список всех розыгрышей", callback_data="admin_list_all_lotteries")],
|
||||
[InlineKeyboardButton(text="<EFBFBD> Завершить розыгрыш", callback_data="admin_finish_lottery")],
|
||||
[InlineKeyboardButton(text="<EFBFBD>️ Удалить розыгрыш", callback_data="admin_delete_lottery")],
|
||||
[InlineKeyboardButton(text="🔙 Назад", callback_data="admin_panel")]
|
||||
]
|
||||
return InlineKeyboardMarkup(inline_keyboard=buttons)
|
||||
|
||||
@@ -49,7 +49,10 @@ class BotController(IBotController):
|
||||
else:
|
||||
welcome_text += "📝 Для участия в розыгрышах необходимо зарегистрироваться."
|
||||
|
||||
keyboard = self.keyboard_builder.get_main_keyboard(self.is_admin(message.from_user.id))
|
||||
keyboard = self.keyboard_builder.get_main_keyboard(
|
||||
is_admin=self.is_admin(message.from_user.id),
|
||||
is_registered=user.is_registered
|
||||
)
|
||||
|
||||
await message.answer(
|
||||
welcome_text,
|
||||
@@ -119,7 +122,7 @@ class BotController(IBotController):
|
||||
|
||||
async def handle_active_lotteries(self, callback: CallbackQuery):
|
||||
"""Показать активные розыгрыши"""
|
||||
lotteries = await self.lottery_service.get_active_lotteries()
|
||||
lotteries = await self.lottery_repo.get_active()
|
||||
|
||||
if not lotteries:
|
||||
await callback.answer("❌ Нет активных розыгрышей", show_alert=True)
|
||||
@@ -132,7 +135,18 @@ class BotController(IBotController):
|
||||
lottery_info = self.message_formatter.format_lottery_info(lottery, participants_count)
|
||||
text += lottery_info + "\n" + "="*30 + "\n\n"
|
||||
|
||||
keyboard = self.keyboard_builder.get_main_keyboard(self.is_admin(callback.from_user.id))
|
||||
# Получаем информацию о регистрации пользователя
|
||||
user = await self.user_service.get_or_create_user(
|
||||
telegram_id=callback.from_user.id,
|
||||
username=callback.from_user.username,
|
||||
first_name=callback.from_user.first_name,
|
||||
last_name=callback.from_user.last_name
|
||||
)
|
||||
|
||||
keyboard = self.keyboard_builder.get_main_keyboard(
|
||||
is_admin=self.is_admin(callback.from_user.id),
|
||||
is_registered=user.is_registered
|
||||
)
|
||||
|
||||
await callback.message.edit_text(
|
||||
text,
|
||||
|
||||
@@ -134,6 +134,26 @@ class IBotController(ABC):
|
||||
async def handle_admin_panel(self, callback):
|
||||
"""Обработать admin panel"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
async def handle_lottery_management(self, callback):
|
||||
"""Обработать управление розыгрышами"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
async def handle_conduct_lottery_admin(self, callback):
|
||||
"""Обработать выбор розыгрыша для проведения"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
async def handle_active_lotteries(self, callback):
|
||||
"""Обработать показ активных розыгрышей"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
async def handle_conduct_lottery(self, callback):
|
||||
"""Обработать проведение конкретного розыгрыша"""
|
||||
pass
|
||||
|
||||
|
||||
class IMessageFormatter(ABC):
|
||||
@@ -154,7 +174,7 @@ class IKeyboardBuilder(ABC):
|
||||
"""Интерфейс создания клавиатур"""
|
||||
|
||||
@abstractmethod
|
||||
def get_main_keyboard(self, is_admin: bool):
|
||||
def get_main_keyboard(self, is_admin: bool, is_registered: bool = False):
|
||||
"""Получить главную клавиатуру"""
|
||||
pass
|
||||
|
||||
|
||||
Reference in New Issue
Block a user