From 0dc0ae8111f983bb956c55a300004e4bff9b2f46 Mon Sep 17 00:00:00 2001 From: "Andrew K. Choi" Date: Mon, 17 Nov 2025 06:56:50 +0900 Subject: [PATCH] fix: fix /start command not working - router order issue PROBLEM: - /start command was not responding - Chat router was intercepting all text messages including commands - Main router with /start handler was connected AFTER chat_router ROOT CAUSE: - chat_router has @router.message(F.text) handler that catches ALL text - It was connected BEFORE main router with Command('start') handler - chat_router returned early for /start, preventing main handler from running SOLUTION: 1. Move main router (with /start, /help, /admin) to FIRST position 2. Keep chat_router LAST (catches only unhandled messages) 3. Remove /start and /help from chat_handlers command list (handled earlier) ROUTER ORDER (priority): 1. router (main.py) - base commands 2. admin_router - admin panel 3. registration_router 4. admin_account_router 5. admin_chat_router 6. redraw_router 7. account_router 8. chat_router - LAST (catch-all for broadcasts) ALSO FIXED: - Add missing imports in admin_panel.py: Lottery, Participation, Account - Fixes NameError crashes in cleanup functions --- main.py | 10 ++++++---- src/handlers/admin_panel.py | 2 +- src/handlers/chat_handlers.py | 7 ++++--- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/main.py b/main.py index d7727f4..6c363f7 100644 --- a/main.py +++ b/main.py @@ -145,17 +145,19 @@ async def main(): logger.info("Запуск бота...") # Подключаем роутеры в правильном порядке - # 1. Сначала специфичные роутеры + # 1. Основной роутер main.py с базовыми командами (/start, /help, /admin) + dp.include_router(router) + + # 2. Специфичные роутеры dp.include_router(admin_router) # Админ панель - самая высокая специфичность dp.include_router(registration_router) # Регистрация dp.include_router(admin_account_router) # Админские команды счетов dp.include_router(admin_chat_router) # Админские команды чата dp.include_router(redraw_router) # Повторные розыгрыши dp.include_router(account_router) # Пользовательские счета - dp.include_router(chat_router) # Пользовательский чат (последним - ловит все сообщения) - # 2. Основной роутер main.py - dp.include_router(router) + # 3. Chat router ПОСЛЕДНИМ (ловит все необработанные сообщения) + dp.include_router(chat_router) # Пользовательский чат (последним - ловит все сообщения) # Запускаем polling try: diff --git a/src/handlers/admin_panel.py b/src/handlers/admin_panel.py index 21529ba..670aa5a 100644 --- a/src/handlers/admin_panel.py +++ b/src/handlers/admin_panel.py @@ -15,7 +15,7 @@ import json from ..core.database import async_session_maker from ..core.services import UserService, LotteryService, ParticipationService from ..core.config import ADMIN_IDS -from ..core.models import User +from ..core.models import User, Lottery, Participation, Account # Состояния для админки diff --git a/src/handlers/chat_handlers.py b/src/handlers/chat_handlers.py index 16d22a8..b667935 100644 --- a/src/handlers/chat_handlers.py +++ b/src/handlers/chat_handlers.py @@ -107,9 +107,10 @@ async def handle_text_message(message: Message): """Обработчик текстовых сообщений""" # Проверяем является ли это командой if message.text and message.text.startswith('/'): - # Список пользовательских команд, которые НЕ нужно пересылать - user_commands = ['/start', '/help', '/my_code', '/my_accounts'] - admin_commands = ['/start', + # Список команд, которые НЕ нужно пересылать + # (Базовые команды /start, /help уже обработаны раньше в main.py) + user_commands = ['/my_code', '/my_accounts'] + admin_commands = [ '/add_account', '/remove_account', '/verify_winner', '/winner_status', '/user_info', '/check_unclaimed', '/redraw', '/chat_mode', '/set_forward', '/global_ban', '/ban', '/unban', '/banlist', '/delete_msg', '/chat_stats'