"""Обработчики справки и помощи пользователям""" from aiogram import Router, F from aiogram.types import Message, CallbackQuery, InlineKeyboardMarkup, InlineKeyboardButton from aiogram.filters import Command from src.core.config import ADMIN_IDS from src.filters.case_insensitive import CaseInsensitiveCommand def is_admin(user_id: int) -> bool: """Проверка является ли пользователь админом""" return user_id in ADMIN_IDS router = Router(name='help_router') def get_help_menu_keyboard() -> InlineKeyboardMarkup: """Клавиатура меню справки""" buttons = [ [InlineKeyboardButton(text="📝 Регистрация", callback_data="help_registration")], [InlineKeyboardButton(text="🎰 Участие в розыгрышах", callback_data="help_lottery")], [InlineKeyboardButton(text="📱 Мои логины", callback_data="help_logins")], [InlineKeyboardButton(text="💬 Чат", callback_data="help_chat")], [InlineKeyboardButton(text="⚙️ Команды", callback_data="help_commands")], [InlineKeyboardButton(text="🏠 Главная", callback_data="back_to_main")] ] return InlineKeyboardMarkup(inline_keyboard=buttons) def get_back_to_help_keyboard() -> InlineKeyboardMarkup: """Клавиатура возврата к справке""" buttons = [ [InlineKeyboardButton(text="◀️ Назад к справке", callback_data="help_main")], [InlineKeyboardButton(text="🏠 Главная", callback_data="back_to_main")] ] return InlineKeyboardMarkup(inline_keyboard=buttons) @router.message(CaseInsensitiveCommand("help")) async def help_command(message: Message): """Показать справку по команде /help (регистронезависимо)""" await show_help_main(message) @router.callback_query(F.data == "help_main") async def help_main_callback(callback: CallbackQuery): """Показать главное меню справки""" await callback.answer() await show_help_main(callback.message, edit=True) async def show_help_main(message: Message, edit: bool = False): """Показать главное меню справки""" text = ( "❓ Справка по работе с ботом\n\n" "Выберите интересующий вас раздел:\n\n" "📝 Регистрация - как зарегистрироваться в системе\n" "🎰 Участие в розыгрышах - как участвовать и выигрывать\n" "📱 Мои логины - информация о ваших добавленных логинах\n" "💬 Чат - общение с другими участниками\n" "⚙️ Команды - список доступных команд" ) keyboard = get_help_menu_keyboard() if edit: try: await message.edit_text(text, reply_markup=keyboard, parse_mode="HTML") except: await message.answer(text, reply_markup=keyboard, parse_mode="HTML") else: await message.answer(text, reply_markup=keyboard, parse_mode="HTML") @router.callback_query(F.data == "help_registration") async def help_registration(callback: CallbackQuery): """Справка по регистрации""" await callback.answer() text = ( "📝 Регистрация в системе\n\n" "Как зарегистрироваться:\n\n" "1️⃣ Откройте главное меню и выберите \"Регистрация\"\n\n" "2️⃣ Введите ваши данные:\n" " • Имя и фамилию\n" " • Номер телефона\n" " • Номер клубной карты (если есть)\n\n" "3️⃣ Ожидайте подтверждения от администратора\n\n" "4️⃣ После одобрения вам станут доступны все функции бота:\n" " ✅ Участие в розыгрышах\n" " ✅ Доступ к чату\n" " ✅ Получение уведомлений\n\n" "💡 Важно!\n" "Указывайте корректные данные - они проверяются администратором.\n\n" "Статус вашей регистрации можно проверить в главном меню." ) keyboard = get_back_to_help_keyboard() try: await callback.message.edit_text(text, reply_markup=keyboard, parse_mode="HTML") except: await callback.message.answer(text, reply_markup=keyboard, parse_mode="HTML") @router.callback_query(F.data == "help_lottery") async def help_lottery(callback: CallbackQuery): """Справка по розыгрышам""" await callback.answer() text = ( "🎰 Участие в розыгрышах\n\n" "Как принять участие:\n\n" "1️⃣ Убедитесь, что вы зарегистрированы\n\n" "2️⃣ Дождитесь объявления нового розыгрыша\n" " • Уведомления приходят всем участникам\n" " • Розыгрыши проводятся регулярно\n\n" "3️⃣ В описании розыгрыша будет указано:\n" " 📝 Название и описание приза\n" " 👥 Количество победителей\n" " 📅 Дата и время проведения\n\n" "4️⃣ Когда придет время:\n" " • Администратор проведет розыгрыш\n" " • Победители определяются случайным образом\n" " • Всем участникам придет уведомление о результатах\n\n" "🏆 Если вы выиграли:\n" " • Вы получите личное уведомление\n" " • Информация о получении приза будет в сообщении\n" " • Следуйте инструкциям администратора\n\n" "💡 Совет: Включите уведомления бота, чтобы не пропустить розыгрыш!" ) keyboard = get_back_to_help_keyboard() try: await callback.message.edit_text(text, reply_markup=keyboard, parse_mode="HTML") except: await callback.message.answer(text, reply_markup=keyboard, parse_mode="HTML") @router.callback_query(F.data == "help_logins") async def help_logins(callback: CallbackQuery): """Справка по логинам пользователей""" await callback.answer() text = ( "📱 Мои логины\n\n" "Что это такое?\n\n" "В этом разделе вы всегда сможете найти свои добавленные логины в розыгрыши, " "которые администратор указал для вас в системе.\n\n" "Какая информация показывается?\n\n" "Для каждого логина вы сможете увидеть:\n" "🎲 Активные розыгрыши - розыгрыши в которых сейчас участвует логин\n" "🏁 Завершенные розыгрыши - прошедшие розыгрыши:\n" " 🏆 ВЫИГРАЛ - если логин победил (указано место)\n" " ✗ Не выиграл - если логин не получил приз\n\n" "⚠️ Важное уточнение о статусе логинов:\n\n" "✅ Зеленый (активный) - логин участвует в новых розыгрышах\n" "⏸️ Серый (неактивный) - логин не участвует в новых розыгрышах\n\n" "Имейте в виду, что логины, которые участвовали в закрытых розыгрышах, " "не добавляются в новые розыгрыши. В списке отображаются только те логины, " "которые активны и соответствуют условиям текущих розыгрышей.\n\n" "Как это работает:\n\n" "1️⃣ Если у вас есть 100 логинов\n" "2️⃣ 60 из них участвовали в прошедших/закрытых розыгрышах\n" "3️⃣ Статус этих 60 логинов будет ⏸️ (неактивны)\n" "4️⃣ Они не добавляются в новые розыгрыши\n" "5️⃣ В новых розыгрышах участвуют только оставшиеся активные логины\n\n" "Как использовать:\n\n" "1️⃣ Откройте главное меню\n" "2️⃣ Нажмите кнопку \"Мои логины\"\n" "3️⃣ Вы увидите полный список всех ваших логинов с информацией\n\n" "💡 Совет:\n" "Если вы не видите ожидаемый логин в списке активных розыгрышей, " "это может означать, что он уже участвовал в закрытых розыгрышах и помечен как неактивный. " "Свяжитесь с администратором для уточнения.\n\n" "🔄 Обновление информации:\n" "Список обновляется автоматически при каждом открытии раздела." ) keyboard = get_back_to_help_keyboard() try: await callback.message.edit_text(text, reply_markup=keyboard, parse_mode="HTML") except: await callback.message.answer(text, reply_markup=keyboard, parse_mode="HTML") @router.callback_query(F.data == "help_chat") async def help_chat(callback: CallbackQuery): """Справка по чату""" await callback.answer() text = ( "💬 Чат участников\n\n" "Как пользоваться чатом:\n\n" "1️⃣ Вход в чат:\n" " • Откройте главное меню\n" " • Выберите \"Войти в чат\"\n" " • Или отправьте команду /chat\n\n" "2️⃣ Отправка сообщений:\n" " • Пишите как обычно в Telegram\n" " • Ваши сообщения увидят все участники\n" " • Можно отправлять:\n" " 📝 Текст\n" " 🖼 Фото и видео\n" " 📎 Документы\n" " 😊 Стикеры\n\n" "3️⃣ Выход из чата:\n" " • Нажмите кнопку \"Выйти из чата\"\n" " • Или отправьте команду /exit\n" " • Или напишите старт / start / /start\n\n" "⚠️ Правила чата:\n" " • Будьте вежливы с другими участниками\n" " • Не спамьте сообщениями\n" " • Запрещены оскорбления и реклама\n" " • Администратор может заблокировать за нарушения\n\n" "💡 Подсказка:\n" "Если вы отправляете 20+ сообщений, они рассылаются пакетами с небольшой задержкой." ) keyboard = get_back_to_help_keyboard() try: await callback.message.edit_text(text, reply_markup=keyboard, parse_mode="HTML") except: await callback.message.answer(text, reply_markup=keyboard, parse_mode="HTML") @router.callback_query(F.data == "help_commands") async def help_commands(callback: CallbackQuery): """Справка по командам""" await callback.answer() user_id = callback.from_user.id is_user_admin = is_admin(user_id) text = ( "⚙️ Список команд бота\n\n" "Основные команды:\n\n" "🏠 /start - Главное меню\n" "❓ /help - Справка (это меню)\n" "💬 /chat - Войти в чат\n" "🚪 /exit - Выйти из чата\n\n" "Как использовать:\n\n" "• Отправьте команду в чат с ботом\n" "• Начните команду с символа /\n" "• Можно также использовать кнопки в меню\n\n" ) if is_user_admin: text += ( "👑 Команды администратора:\n\n" "🔧 /admin - Панель администратора\n" "📊 Управление розыгрышами\n" "👥 Управление пользователями\n" "📢 Массовые рассылки\n" "⚙️ Настройки системы\n\n" ) text += ( "💡 Полезные советы:\n\n" "• Включите уведомления для получения важных сообщений\n" "• Используйте кнопки - это быстрее команд\n" "• В чате пишите старт чтобы вернуться в меню\n" "• Регулярно проверяйте бота на наличие новых розыгрышей" ) keyboard = get_back_to_help_keyboard() try: await callback.message.edit_text(text, reply_markup=keyboard, parse_mode="HTML") except: await callback.message.answer(text, reply_markup=keyboard, parse_mode="HTML")