Привет Не могу придумать как реализовать мою идею: Всё происходит в топике. Админ отвечает на сообщение формата Клиент: @sdfsdfsdcsdfsfssdfsd ID: 832484284 Из этого сообщения мы получаем user_id, куда слать ответ. Дальше мне нужно чтобы по заданному user_id отправлялся любой тип данных - текст, фото, всё что угодно, с учётом форматирования. Мне нужно отправить полную копию сообщения от имени бота, помогите реализовать пж. Вот это не работает, везде тип сообщения: ContentType.TEXT. Как использовать copy для моей задачи я не разобрался @router.message(F.reply_to_message) async def handle_operator_reply(message: types.Message, state: FSMContext): if message.chat.id == int(TP_CHAT_ID): if " Клиент:" in message.reply_to_message.text and " ID:" in message.reply_to_message.text: client_id = int(message.reply_to_message.text.split("\n")[1].split(": ")[1]) # Определяем тип сообщения в оригинальном сообщении (reply_to_message) reply_message = message.reply_to_message print(f"Тип сообщения: {reply_message.content_type}") # Обработка разных типов медиа-контента if reply_message.photo: # Отправка фото await bot.send_photo(chat_id=client_id, photo=reply_message.photo[-1].file_id, caption=message.caption) elif reply_message.video: # Отправка видео await bot.send_video(chat_id=client_id, video=reply_message.video.file_id, caption=message.caption) elif reply_message.document: # Отправка документов await bot.send_document(chat_id=client_id, document=reply_message.document.file_id, caption=message.caption) elif reply_message.audio: # Отправка аудио await bot.send_audio(chat_id=client_id, audio=reply_message.audio.file_id, caption=message.caption) elif reply_message.sticker: # Отправка стикеров await bot.send_sticker(chat_id=client_id, sticker=reply_message.sticker.file_id) elif reply_message.text: # Отправка текстового сообщения await bot.send_message(chat_id=client_id, text=message.text) else: print("ID чата не совпадает с TP_CHAT_ID") Python @router.message(F.reply_to_message) async def handle_operator_reply(message: types.Message, state: FSMContext): if message.chat.id == int(TP_CHAT_ID): if " Клиент:" in message.reply_to_message.text and " ID:" in message.reply_to_message.text: client_id = int(message.reply_to_message.text.split("\n")[1].split(": ")[1]) # Определяем тип сообщения в оригинальном сообщении (reply_to_message) reply_message = message.reply_to_message print(f"Тип сообщения: {reply_message.content_type}") # Обработка разных типов медиа-контента if reply_message.photo: # Отправка фото await bot.send_photo(chat_id=client_id, photo=reply_message.photo[-1].file_id, caption=message.caption) elif reply_message.video: # Отправка видео await bot.send_video(chat_id=client_id, video=reply_message.video.file_id, caption=message.caption) elif reply_message.document: # Отправка документов await bot.send_document(chat_id=client_id, document=reply_message.document.file_id, caption=message.caption) elif reply_message.audio: # Отправка аудио await bot.send_audio(chat_id=client_id, audio=reply_message.audio.file_id, caption=message.caption) elif reply_message.sticker: # Отправка стикеров await bot.send_sticker(chat_id=client_id, sticker=reply_message.sticker.file_id) elif reply_message.text: # Отправка текстового сообщения await bot.send_message(chat_id=client_id, text=message.text) else: print("ID чата не совпадает с TP_CHAT_ID")
INACTIV_US_125, мне приходит сообщение от пользователя (bot.forward_message) в топик -> под ним приходит сообщение формата Клиент: @sdfsdfsdcsdfsfssdfsd ID: 832484284 -> Админ отвечает на сообщение с ID -> Бот отправляет ответ админа по заданному ID Мне нужно чтобы форматирование сообщения админа осталось в исходном виде.
INACTIV_US_125, нужно как-то копировать введенное сообщение, а потом отсылать его по ID. При этом это может быть и фото, и текст, и стикер
чат гпт все проблемы решит, я через него с 0 знаний питона написал код который открывает бота в тг с 4 разных акков
# В твоем случае в aiogram нет прямого конвертации из markdown -> html для отправки конкретно твоей задачи # Я не помню точно будет работать ли такой вариант # Так что тестируй # Первый варик ... text=message.text_html, parse_mode="HTML" ... # Второй варик def markdown_to_html(markdown_text: str) -> str: html_text = markdown_text html_text = html_text.replace('*', '<b>').replace('_', '<i>') html_text = html_text.replace('<b>', '<b>').replace('</b>', '</b>') html_text = html_text.replace('<i>', '<i>').replace('</i>', '</i>') return html_text # Преобразуем Markdown в HTML html_text = markdown_to_html(message.text) # Отправляем HTML текст обратно ... html_text, parse_mode='HTML' ... Python # В твоем случае в aiogram нет прямого конвертации из markdown -> html для отправки конкретно твоей задачи # Я не помню точно будет работать ли такой вариант # Так что тестируй # Первый варик ... text=message.text_html, parse_mode="HTML" ... # Второй варик def markdown_to_html(markdown_text: str) -> str: html_text = markdown_text html_text = html_text.replace('*', '<b>').replace('_', '<i>') html_text = html_text.replace('<b>', '<b>').replace('</b>', '</b>') html_text = html_text.replace('<i>', '<i>').replace('</i>', '</i>') return html_text # Преобразуем Markdown в HTML html_text = markdown_to_html(message.text) # Отправляем HTML текст обратно ... html_text, parse_mode='HTML' ...
Финальное решение проблемы: @router.message(F.reply_to_message) async def handle_operator_reply(message: types.Message, state: FSMContext): try: if message.chat.id == int(TP_CHAT_ID): if message.reply_to_message and " Воркер:" in message.reply_to_message.text and " ID:" in message.reply_to_message.text: client_id = int(message.reply_to_message.text.split("\n")[1].split(": ")[1]) reply_markup = message.reply_markup # Получаем inline клавиатуру (если она есть) await message.bot.copy_message( chat_id=client_id, from_chat_id=message.chat.id, message_id=message.message_id, reply_markup=reply_markup ) await message.answer(text=f'<b>Сообщение успешно отправлено воркеру <code>{client_id}</code></b>') Python @router.message(F.reply_to_message) async def handle_operator_reply(message: types.Message, state: FSMContext): try: if message.chat.id == int(TP_CHAT_ID): if message.reply_to_message and " Воркер:" in message.reply_to_message.text and " ID:" in message.reply_to_message.text: client_id = int(message.reply_to_message.text.split("\n")[1].split(": ")[1]) reply_markup = message.reply_markup # Получаем inline клавиатуру (если она есть) await message.bot.copy_message( chat_id=client_id, from_chat_id=message.chat.id, message_id=message.message_id, reply_markup=reply_markup ) await message.answer(text=f'<b>Сообщение успешно отправлено воркеру <code>{client_id}</code></b>')