🔒 ЗАЩИТА ОТ СПАМА В ОБЩИЙ ЧАТ
✅ Все команды теперь работают ТОЛЬКО В ЛИЧКЕ: - /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,15 +22,24 @@ router = Router()
|
||||||
|
|
||||||
@router.message(CommandStart())
|
@router.message(CommandStart())
|
||||||
async def cmd_start(message: Message):
|
async def cmd_start(message: Message):
|
||||||
"""Команда /start"""
|
"""Команда /start (ТОЛЬКО В ЛИЧКЕ!)"""
|
||||||
user_id = message.from_user.id
|
# Проверяем что это личка
|
||||||
|
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:
|
async with AsyncSessionLocal() as session:
|
||||||
# Проверяем, есть ли пользователь в БД
|
# Проверяем, есть ли пользователь в БД
|
||||||
stmt = select(User).where(User.user_id == user_id)
|
stmt = select(User).where(User.user_id == user_id)
|
||||||
result = await session.execute(stmt)
|
result = await session.execute(stmt)
|
||||||
user = result.scalar_one_or_none()
|
user = result.scalar_one_or_none()
|
||||||
|
|
||||||
if not user:
|
if not user:
|
||||||
# Создаём нового пользователя
|
# Создаём нового пользователя
|
||||||
user = User(
|
user = User(
|
||||||
|
|
@ -41,7 +50,7 @@ async def cmd_start(message: Message):
|
||||||
)
|
)
|
||||||
session.add(user)
|
session.add(user)
|
||||||
await session.commit()
|
await session.commit()
|
||||||
|
|
||||||
welcome_text = (
|
welcome_text = (
|
||||||
f'🏠 <b>Добро пожаловать, {message.from_user.first_name}!</b>\n\n'
|
f'🏠 <b>Добро пожаловать, {message.from_user.first_name}!</b>\n\n'
|
||||||
f'Я — домовой бот нашего дома.\n\n'
|
f'Я — домовой бот нашего дома.\n\n'
|
||||||
|
|
@ -55,7 +64,7 @@ async def cmd_start(message: Message):
|
||||||
user.first_name = message.from_user.first_name
|
user.first_name = message.from_user.first_name
|
||||||
user.last_name = message.from_user.last_name
|
user.last_name = message.from_user.last_name
|
||||||
await session.commit()
|
await session.commit()
|
||||||
|
|
||||||
if user.verified:
|
if user.verified:
|
||||||
await message.answer(
|
await message.answer(
|
||||||
f'👋 Здравствуйте, {message.from_user.first_name}!\n\n'
|
f'👋 Здравствуйте, {message.from_user.first_name}!\n\n'
|
||||||
|
|
@ -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