From 69985f6afb877067538e7e2b46ef36a17d17dca2 Mon Sep 17 00:00:00 2001 From: "Andrew K. Choi" Date: Sat, 22 Nov 2025 18:59:34 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=D1=83=D0=BB=D1=83=D1=87=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA?= =?UTF-8?q?=D0=B0=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D1=80=D0=BE=D0=B7=D1=8B=D0=B3=D1=80=D1=8B=D1=88=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавлено подробное логирование callback admin_create_lottery - Добавлен немедленный ответ на callback для предотвращения таймаута - Добавлена обработка ошибок с логированием - Исправлена логика проверки прав админа --- src/handlers/admin_panel.py | 29 +++++++++++++++++++++-------- src/handlers/chat_handlers.py | 23 +++++++++++------------ 2 files changed, 32 insertions(+), 20 deletions(-) diff --git a/src/handlers/admin_panel.py b/src/handlers/admin_panel.py index 45b3e07..c183229 100644 --- a/src/handlers/admin_panel.py +++ b/src/handlers/admin_panel.py @@ -204,21 +204,34 @@ async def show_lottery_management(callback: CallbackQuery): @admin_router.callback_query(F.data == "admin_create_lottery") async def start_create_lottery(callback: CallbackQuery, state: FSMContext): """Начать создание розыгрыша""" + logging.info(f"🎯 Callback admin_create_lottery получен от пользователя {callback.from_user.id}") + + # Сразу отвечаем на callback + await callback.answer() + if not is_admin(callback.from_user.id): - await callback.answer("❌ Недостаточно прав", show_alert=True) + logging.warning(f"⚠️ Пользователь {callback.from_user.id} не является админом") + await callback.message.answer("❌ Недостаточно прав") return + logging.info(f"✅ Админ {callback.from_user.id} начинает создание розыгрыша") + text = "📝 Создание нового розыгрыша\n\n" text += "Шаг 1 из 4\n\n" text += "Введите название розыгрыша:" - await callback.message.edit_text( - text, - reply_markup=InlineKeyboardMarkup(inline_keyboard=[ - [InlineKeyboardButton(text="❌ Отмена", callback_data="admin_lotteries")] - ]) - ) - await state.set_state(AdminStates.lottery_title) + try: + await callback.message.edit_text( + text, + reply_markup=InlineKeyboardMarkup(inline_keyboard=[ + [InlineKeyboardButton(text="❌ Отмена", callback_data="admin_lotteries")] + ]) + ) + await state.set_state(AdminStates.lottery_title) + logging.info(f"✅ Состояние установлено: AdminStates.lottery_title") + except Exception as e: + logging.error(f"❌ Ошибка при создании розыгрыша: {e}") + await callback.message.answer(f"❌ Ошибка: {str(e)}") @admin_router.message(StateFilter(AdminStates.lottery_title)) diff --git a/src/handlers/chat_handlers.py b/src/handlers/chat_handlers.py index 1675c58..2f96ce9 100644 --- a/src/handlers/chat_handlers.py +++ b/src/handlers/chat_handlers.py @@ -123,21 +123,20 @@ async def handle_text_message(message: Message): # Извлекаем команду (первое слово) command = message.text.split()[0] if message.text else '' - # Если это пользовательская команда - пропускаем, она будет обработана другими обработчиками - if command in user_commands: - return - - # Если это админская команда - if command in admin_commands: - # Проверяем права админа - if not is_admin(message.from_user.id): - await message.answer("❌ У вас нет прав для выполнения этой команды") + # ИЗМЕНЕНИЕ: Если это команда от АДМИНА - не пересылаем (админ сам её видит) + if is_admin(message.from_user.id): + # Если это админская команда - пропускаем, она будет обработана другими обработчиками + if command in admin_commands: return - # Если админ - команда будет обработана другими обработчиками, пропускаем пересылку + # Если это пользовательская команда от админа - тоже пропускаем + if command in user_commands: + return + # Любая другая команда от админа - тоже не пересылаем return - # Если неизвестная команда - тоже не пересылаем - return + # ИЗМЕНЕНИЕ: Если команда от обычного пользователя - ПЕРЕСЫЛАЕМ админу + # Чтобы админ видел, что пользователь отправил /start или другую команду + # НЕ делаем return, продолжаем выполнение для пересылки async with async_session_maker() as session: # Проверяем права на отправку