Files
Support-BOT/handlers_messages.py
2024-05-01 21:10:09 +03:00

102 lines
4.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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)