🔒 ЗАЩИТА ОТ СПАМА В ОБЩИЙ ЧАТ
✅ Все команды теперь работают ТОЛЬКО В ЛИЧКЕ: - /start, /help - только в личке - Все кнопки меню - только в личке - Админ-команды - только в личке (уже было) 📝 Что будет если написать в общем чате: '💡 Бот работает только в личных сообщениях! Нажмите на имя бота сверху и напишите /start в личке' 🎯 Преимущества: - Нет спама в общем чате - Все диалоги конфиденциальны - Жильцы общаются с ботом в личке - Админы управляют через личку 💡 Исключения: - Мониторинг сообщений (анти-мат, анти-спам) - Детект шпионов - Рейтинги активности - Эти функции работают в чате но не спам! Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
parent
8a41de9ddb
commit
5adb3d7818
1 changed files with 33 additions and 5 deletions
|
|
@ -22,7 +22,16 @@ router = Router()
|
||||||
|
|
||||||
@router.message(CommandStart())
|
@router.message(CommandStart())
|
||||||
async def cmd_start(message: Message):
|
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
|
user_id = message.from_user.id
|
||||||
|
|
||||||
async with AsyncSessionLocal() as session:
|
async with AsyncSessionLocal() as session:
|
||||||
|
|
@ -387,9 +396,20 @@ from sqlalchemy import desc
|
||||||
_thank_pages: dict[int, dict] = {}
|
_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')
|
@router.callback_query(F.data == 'achievements')
|
||||||
async def cb_achievements_menu(callback: CallbackQuery):
|
async def cb_achievements_menu(callback: CallbackQuery):
|
||||||
"""Кнопка Достижения"""
|
"""Кнопка Достижения"""
|
||||||
|
if not check_private_chat(callback):
|
||||||
|
return
|
||||||
await callback.answer()
|
await callback.answer()
|
||||||
# Перенаправляем на команду /achievements
|
# Перенаправляем на команду /achievements
|
||||||
from handlers.achievements import cmd_achievements
|
from handlers.achievements import cmd_achievements
|
||||||
|
|
@ -399,6 +419,8 @@ async def cb_achievements_menu(callback: CallbackQuery):
|
||||||
@router.callback_query(F.data == 'events')
|
@router.callback_query(F.data == 'events')
|
||||||
async def cb_events_menu(callback: CallbackQuery):
|
async def cb_events_menu(callback: CallbackQuery):
|
||||||
"""Кнопка События"""
|
"""Кнопка События"""
|
||||||
|
if not check_private_chat(callback):
|
||||||
|
return
|
||||||
await callback.answer()
|
await callback.answer()
|
||||||
# Перенаправляем на команду /events
|
# Перенаправляем на команду /events
|
||||||
from handlers.events import cmd_events
|
from handlers.events import cmd_events
|
||||||
|
|
@ -408,6 +430,8 @@ async def cb_events_menu(callback: CallbackQuery):
|
||||||
@router.callback_query(F.data == 'payments')
|
@router.callback_query(F.data == 'payments')
|
||||||
async def cb_payments_menu(callback: CallbackQuery):
|
async def cb_payments_menu(callback: CallbackQuery):
|
||||||
"""Кнопка Платежи"""
|
"""Кнопка Платежи"""
|
||||||
|
if not check_private_chat(callback):
|
||||||
|
return
|
||||||
await callback.answer()
|
await callback.answer()
|
||||||
# Перенаправляем на команду /payments
|
# Перенаправляем на команду /payments
|
||||||
from handlers.payments import cmd_payments
|
from handlers.payments import cmd_payments
|
||||||
|
|
@ -417,6 +441,8 @@ async def cb_payments_menu(callback: CallbackQuery):
|
||||||
@router.callback_query(F.data == 'polls')
|
@router.callback_query(F.data == 'polls')
|
||||||
async def cb_polls_menu(callback: CallbackQuery):
|
async def cb_polls_menu(callback: CallbackQuery):
|
||||||
"""Кнопка Опросы"""
|
"""Кнопка Опросы"""
|
||||||
|
if not check_private_chat(callback):
|
||||||
|
return
|
||||||
await callback.answer()
|
await callback.answer()
|
||||||
# Перенаправляем на команду /polls
|
# Перенаправляем на команду /polls
|
||||||
from handlers.polls import cmd_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')
|
@router.callback_query(F.data == 'thank_user')
|
||||||
async def cb_thank_user_menu(callback: CallbackQuery):
|
async def cb_thank_user_menu(callback: CallbackQuery):
|
||||||
"""Кнопка Поблагодарить - выбор пользователя"""
|
"""Кнопка Поблагодарить - выбор пользователя"""
|
||||||
|
if not check_private_chat(callback):
|
||||||
|
return
|
||||||
await callback.answer()
|
await callback.answer()
|
||||||
|
|
||||||
async with AsyncSessionLocal() as session:
|
async with AsyncSessionLocal() as session:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue