102 lines
4.0 KiB
Python
102 lines
4.0 KiB
Python
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)
|