Не отправляются сообщения с прикрепленными картинками в чат поддержки Телеграм

Рейтинг: 0Ответов: 1Опубликовано: 23.05.2023

Есть чат бот поддержки в телеге, написанный на python 3. Пользователь пишет боту своему проблему, при этом сообщение форвардится в чат поддержки телеграм, где сидит поддержка. Соответственно поддержка отвечает и сообщению уходит обратно в его чат с ботом.

Проблема в том, что, если пользователь прикрепляет к своему сообщению картинки или файлы, то они не прилетаю в бот поддержки. Подскажите, пожалуйста, что нужно поправить, чтобы сообщения с картинками (jpeg, png) или отдельно картинки корректно пересылались в чат поддержки

хендлер бота, который отвечает за получение сообщения от пользователя и перенаправление в чат поддержки

from aiogram import types
from aiogram.dispatcher.storage import FSMContext
from aiogram.dispatcher.filters.builtin import Command

from loader import dp, db

from data.config import SUPPORT_CHAT
from states.query import Query


@dp.message_handler(Command('help'))
async def show_commands(message: types.Message):
    db.add_user(
        message.from_user.id,
        message.from_user.first_name,
        message.from_user.last_name,
        message.from_user.username
    )
    await message.answer("""
В скором времени специалист подключится к решению вашей проблемы.

Если вы поняли что вам более не нужна помошь, нажмите /start
    """)


# Эхо хендлер, куда летят текстовые сообщения без указанного состояния
@dp.message_handler(Command('start'), state='*')
async def register_user(message: types.Message, state: FSMContext):
    db.add_user(
        message.from_user.id,
        message.from_user.first_name,
        message.from_user.last_name,
        message.from_user.username
    )
    await message.answer("""
Добро пожаловать в бота технической поддержки <b>1</b>

Чтобы задать вопрос просто напишите его в чат
    """, parse_mode='HTML')
    data = await state.get_data()
    if data.get('ticket'):
        db.close_ticket(message.from_user.id, message.from_user.id)
    await state.reset_state()


@dp.message_handler(chat_type=types.ChatType.PRIVATE, state=Query.query)
async def continue_ticket(message: types.Message, state: FSMContext):
    db.add_user(
        message.from_user.id,
        message.from_user.first_name,
        message.from_user.last_name,
        message.from_user.username
    )
    ticket_id = (await state.get_data())['ticket']

    frwd_message = await dp.bot.copy_message(chat_id=SUPPORT_CHAT, from_chat_id=message.from_user.id, message_id=message.message_id)
    
 
    if message.photo or message.document or message.video or message.video_note or message.animation or message.audio:
        await dp.bot.edit_message_caption(
            SUPPORT_CHAT, frwd_message.message_id,
            caption=f'Тикет <a>#t{ticket_id}</a> от <a href="https://t.me/{message.from_user.id}">{message.from_user.first_name}</a>\n\n' + message.text,
        )
    else:
        await dp.bot.edit_message_text(
            f'Тикет <a>#t{ticket_id}</a> от <a href="https://t.me/{message.from_user.id}">{message.from_user.first_name}</a>\n\n' + message.text,
            SUPPORT_CHAT, frwd_message.message_id
        )

    db.save_message(frwd_message.message_id, message.from_user.id)



@dp.message_handler(chat_type=types.ChatType.PRIVATE, state='*')
async def generate_ticket(message: types.Message, state: FSMContext):
    db.add_user(
        message.from_user.id,
        message.from_user.first_name,
        message.from_user.last_name,
        message.from_user.username
    )
    try:
        ticket_id = db.get_user_ticket(message.from_user.id)
    except:
        ticket_id = db.create_ticket(message.from_user.id)
        await message.answer(f"""
Здравствуйте. Вашему обращению присвоен номер #{ticket_id}
В скором времени специалист подключится к решению вашей проблемы.
""")
    await state.update_data(ticket=ticket_id)
    # await message.forward(SUPPORT_CHAT)
    frwd_message = await dp.bot.copy_message(chat_id=SUPPORT_CHAT, from_chat_id=message.from_user.id, message_id=message.message_id)

    if message.photo or message.document or message.video or message.video_note or message.animation or message.audio:
        # await frwd_message.edit_caption(f'Тикет <a>#t{ticket_id}</a> от <a href="https://t.me/{message.from_user.id}">{message.from_user.first_name}</a>\n\n' + message.text)
        await dp.bot.edit_message_caption(
            SUPPORT_CHAT, frwd_message.message_id,
            caption=f'Тикет <a>#t{ticket_id}</a> от <a href="https://t.me/{message.from_user.id}">{message.from_user.first_name}</a>\n\n' + message.text,
        )
    else:
        await dp.bot.edit_message_text(
            f'Тикет <a>#t{ticket_id}</a> от <a href="https://t.me/{message.from_user.id}">{message.from_user.first_name}</a>\n\n' + message.text,
            SUPPORT_CHAT, frwd_message.message_id
        )
    
    db.save_message(frwd_message.message_id, message.from_user.id)

    await Query.query.set()

Ответы

▲ 1Принят

Вам нужно использовать @dp.message_handler(content_types="photo"), чтобы обрабатывать текстовые сообщения.

Пример:

@dp.message_handler(content_types="photo")
async def handle_photo(message: types.Message):
    # Тут напишите код, который вам нужен, например,
    # await message.forward("ВАШ CHAT ID")

В функции handle_photo вы можете написать что угодно. Вы можете расширить код до нужного функционала.