🔒 ЗАЩИТА ОТ СПАМА В ОБЩИЙ ЧАТ

 Все команды теперь работают ТОЛЬКО В ЛИЧКЕ:
- /start, /help - только в личке
- Все кнопки меню - только в личке
- Админ-команды - только в личке (уже было)

📝 Что будет если написать в общем чате:
'💡 Бот работает только в личных сообщениях!
Нажмите на имя бота сверху и напишите /start в личке'

🎯 Преимущества:
- Нет спама в общем чате
- Все диалоги конфиденциальны
- Жильцы общаются с ботом в личке
- Админы управляют через личку

💡 Исключения:
- Мониторинг сообщений (анти-мат, анти-спам)
- Детект шпионов
- Рейтинги активности
- Эти функции работают в чате но не спам!

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
Admin 2026-03-03 18:25:21 +00:00
parent 8a41de9ddb
commit 5adb3d7818

View file

@ -22,7 +22,16 @@ router = Router()
@router.message(CommandStart())
async def cmd_start(message: Message):
"""Команда /start"""
"""Команда /start (ТОЛЬКО В ЛИЧКЕ!)"""
# Проверяем что это личка
if message.chat.type != 'private':
await message.answer(
'💡 <b>Бот работает только в личных сообщениях!</b>\n\n'
'Нажмите на имя бота сверху и напишите /start в личке',
parse_mode='HTML'
)
return
user_id = message.from_user.id
async with AsyncSessionLocal() as session:
@ -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: