Support-BOT

This commit is contained in:
2024-05-01 21:10:09 +03:00
parent e70690abe1
commit 1874da0d8a
8 changed files with 526 additions and 34 deletions

101
handlers_messages.py Normal file
View File

@@ -0,0 +1,101 @@
from aiogram import Bot, F, Router
from aiogram.exceptions import TelegramForbiddenError
from aiogram.types import Message
from app.bot.utils import extract_user_id, check_user_is_banned
from app.core.config import settings
from app.core.db import get_async_session
from app.crud.message import crud_message
from app.crud.user import crud_user
from filter_media import SupportedMediaFilter
router = Router()
@router.message(F.chat.type == 'private', F.text)
async def send_message_to_group(message: Message, bot: Bot):
if message.text and len(message.text) > 4000:
return await message.reply(text='Пожалуйста, уменьшите размер '
'сообщения, чтобы оно было менее '
'4000 символов')
await bot.send_message(
chat_id=settings.GROUP_ID,
text=(
f'{message.text}\n\n'
f'Тикет: #id{message.from_user.id}'
),
parse_mode='HTML'
)
session_generator = get_async_session()
session = await session_generator.__anext__()
db_user = await crud_user.get_or_create_user_by_tg_message(message, session)
if check_user_is_banned(db_user):
return
message_data = {
'text': message.text,
'telegram_user_id': message.from_user.id,
'attachments': False,
}
await crud_message.create(message_data, session)
@router.message(SupportedMediaFilter(), F.chat.type == 'private')
async def supported_media(message: Message):
if message.caption and len(message.caption) > 1000:
return await message.reply(text='Слишком длинное описание. Описание '
'не может быть больше 1000 символов')
await message.copy_to(
chat_id=settings.GROUP_ID,
caption=((message.caption or "") +
f"\n\n Тикет: #id{message.from_user.id}"),
parse_mode="HTML"
)
session_generator = get_async_session()
session = await session_generator.__anext__()
db_user = await crud_user.get_or_create_user_by_tg_message(message, session)
if check_user_is_banned(db_user):
return
message_data = {
'telegram_user_id': message.from_user.id,
'attachments': True,
}
if message.caption:
message_data['text'] = message.caption
await crud_message.create(message_data, session)
@router.message(F.chat.id == int(settings.GROUP_ID),
F.reply_to_message)
async def send_message_answer(message: Message,
bot: Bot):
if not message.reply_to_message.from_user.is_bot:
return
try:
chat_id = extract_user_id(message.reply_to_message)
except ValueError as err:
return await message.reply(text=f'Не могу извлечь Id. Возможно он '
f'некорректный. Текст ошибки:\n'
f'{str(err)}')
try:
await message.copy_to(chat_id)
except TelegramForbiddenError:
await message.reply(text='Сообщение не доставлено. Бот был '
'заблокировн пользователем, '
'либо пользователь удален')
session_generator = get_async_session()
session = await session_generator.__anext__()
db_user = await crud_user.get_or_create_user_by_tg_message(message, session)
await crud_user.register_admin(db_user, session)
message_data = {
'telegram_user_id': message.from_user.id,
'answer_to_user_id': chat_id,
}
if message.text:
message_data['text'] = message.text
else:
if message.caption:
message_data['text'] = message.caption
message_data['attachments'] = True
await crud_message.create(message_data, session)