Переслать сообщение в telegram bot aiogram python

Есть кусок кода:

@dp.message_handler(state=Test.Q4)
async def answer_q3(message:types.Message, state: FSMContext):

    await message.answer("Спасибо за обращение!", reply_markup=types.ReplyKeyboardRemove())
    reply = await message.answer(f"Тип обращения: {question_type}\nНазвание : {seller_name}\nТекст вопроса: "f"{question_text}")
    reply = reply.text
    extra_add = question_extra
    await dp.bot.send_message(1234567, reply + "\nДополнительно: ")
    await dp.bot.send_message(1234567, extra_add)
    await state.reset_state()

До этого куска кода бот запрашивает польльзователя отправить дополнительную информацию, это может быть что угодно - текст, фото, видео. Нужно, что бы это сообщение было отловлено хэндлером и просто переслано по нужной мне айдишке другому пользователю. Сейчас это работает только с текстом, а медиа улетает в дефолтный хендлер с состоянием Q4.


Ответы (2 шт):

Автор решения: MyZik

В зависимости от типа сообщения Вам нужно использовать разные методы:

  • sendMessage -> для текста
  • sendPhoto -> для фотографий
  • sendDocument -> для документов

В aiogram это будет выглядеть примерно так:

async def answer_q3(message: types.Message, state: FSMContext):
    text = f"Тип обращения: {question_type}\n" \
           f"Название : {seller_name}\n" \
           f"Текст вопроса: {question_text}\n\n" \
           f"Дополнительно: {question_extra}"

    if message.text is not None:
        await bot.send_message(1234567, text)
    elif message.photo is not None:
        await bot.send_photo(chat_id=1234567, photo=message.photo[-1].file_id,
                             caption=text)
    elif message.document is not None:
        await bot.send_document(chat_id=1234567, document=message.document.file_id,
                                caption=text)
    await state.reset_state()

Я указал пример пересылки сообщения в конкретный чат, и немножко оптимизировал код, полностью Вашу логику дополните сами :)

→ Ссылка
Автор решения: NikMAX

Используйте метод forwardMessages. MyZik предложил рабочее решение, но на мой взгляд будет более удобным и правильным использование специально предназначенного для этого метода (при условии, что вы хотите просто пересылать сообщение, а не воссоздавать его). UPD. Извиняюсь, что без примера кода

→ Ссылка