Support-BOT
This commit is contained in:
101
app/bot/handlers_messages.py
Normal file
101
app/bot/handlers_messages.py
Normal 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)
|
||||
Reference in New Issue
Block a user