diff --git a/handlers/users.py b/handlers/users.py index df87c30..f8232a1 100644 --- a/handlers/users.py +++ b/handlers/users.py @@ -22,15 +22,24 @@ router = Router() @router.message(CommandStart()) async def cmd_start(message: Message): - """Команда /start""" - user_id = message.from_user.id + """Команда /start (ТОЛЬКО В ЛИЧКЕ!)""" + # Проверяем что это личка + if message.chat.type != 'private': + await message.answer( + '💡 Бот работает только в личных сообщениях!\n\n' + 'Нажмите на имя бота сверху и напишите /start в личке', + parse_mode='HTML' + ) + return + user_id = message.from_user.id + async with AsyncSessionLocal() as session: # Проверяем, есть ли пользователь в БД stmt = select(User).where(User.user_id == user_id) result = await session.execute(stmt) user = result.scalar_one_or_none() - + if not user: # Создаём нового пользователя user = User( @@ -41,7 +50,7 @@ async def cmd_start(message: Message): ) session.add(user) await session.commit() - + welcome_text = ( f'🏠 Добро пожаловать, {message.from_user.first_name}!\n\n' f'Я — домовой бот нашего дома.\n\n' @@ -55,7 +64,7 @@ async def cmd_start(message: Message): user.first_name = message.from_user.first_name user.last_name = message.from_user.last_name await session.commit() - + if user.verified: await message.answer( f'👋 Здравствуйте, {message.from_user.first_name}!\n\n' @@ -387,9 +396,20 @@ from sqlalchemy import desc _thank_pages: dict[int, dict] = {} +# Проверка что сообщение в личке +def check_private_chat(callback: CallbackQuery) -> bool: + """Проверяет что callback из лички""" + if callback.message.chat.type != 'private': + callback.answer('💡 Это работает только в личных сообщениях!', show_alert=True) + return False + return True + + @router.callback_query(F.data == 'achievements') async def cb_achievements_menu(callback: CallbackQuery): """Кнопка Достижения""" + if not check_private_chat(callback): + return await callback.answer() # Перенаправляем на команду /achievements from handlers.achievements import cmd_achievements @@ -399,6 +419,8 @@ async def cb_achievements_menu(callback: CallbackQuery): @router.callback_query(F.data == 'events') async def cb_events_menu(callback: CallbackQuery): """Кнопка События""" + if not check_private_chat(callback): + return await callback.answer() # Перенаправляем на команду /events from handlers.events import cmd_events @@ -408,6 +430,8 @@ async def cb_events_menu(callback: CallbackQuery): @router.callback_query(F.data == 'payments') async def cb_payments_menu(callback: CallbackQuery): """Кнопка Платежи""" + if not check_private_chat(callback): + return await callback.answer() # Перенаправляем на команду /payments from handlers.payments import cmd_payments @@ -417,6 +441,8 @@ async def cb_payments_menu(callback: CallbackQuery): @router.callback_query(F.data == 'polls') async def cb_polls_menu(callback: CallbackQuery): """Кнопка Опросы""" + if not check_private_chat(callback): + return await callback.answer() # Перенаправляем на команду /polls from handlers.polls import cmd_polls @@ -426,6 +452,8 @@ async def cb_polls_menu(callback: CallbackQuery): @router.callback_query(F.data == 'thank_user') async def cb_thank_user_menu(callback: CallbackQuery): """Кнопка Поблагодарить - выбор пользователя""" + if not check_private_chat(callback): + return await callback.answer() async with AsyncSessionLocal() as session: