From 5adb3d7818bf0611931b81e89030a61db87427ae Mon Sep 17 00:00:00 2001 From: Admin Date: Tue, 3 Mar 2026 18:25:21 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=92=20=D0=97=D0=90=D0=A9=D0=98=D0=A2?= =?UTF-8?q?=D0=90=20=D0=9E=D0=A2=20=D0=A1=D0=9F=D0=90=D0=9C=D0=90=20=D0=92?= =?UTF-8?q?=20=D0=9E=D0=91=D0=A9=D0=98=D0=99=20=D0=A7=D0=90=D0=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✅ Все команды теперь работают ТОЛЬКО В ЛИЧКЕ: - /start, /help - только в личке - Все кнопки меню - только в личке - Админ-команды - только в личке (уже было) 📝 Что будет если написать в общем чате: '💡 Бот работает только в личных сообщениях! Нажмите на имя бота сверху и напишите /start в личке' 🎯 Преимущества: - Нет спама в общем чате - Все диалоги конфиденциальны - Жильцы общаются с ботом в личке - Админы управляют через личку 💡 Исключения: - Мониторинг сообщений (анти-мат, анти-спам) - Детект шпионов - Рейтинги активности - Эти функции работают в чате но не спам! Co-authored-by: Qwen-Coder --- handlers/users.py | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) 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: