Копирование формата сообщения пользователя telebot

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

Моя задача состоит в том, чтобы каким-то образом сохранить формат сообщения (жирный, курсив, подчёркнутый текст и т.д.) пользователя, после чего отправить ему точную копию его сообщения с тем же форматом. Как это можно сделать?

UPD: Такой код почему-то не работает, бот отправляет обычное сообщение, без формата:

def copy_format(message):
    bot.send_message(message.chat.id, text=message.text, entities=message.entities)


@bot.message_handler(commands=['test'])
def test(message):
    bot.send_message(chat_id=message.chat.id, text='Отправь сообщение с форматом')
    bot.register_next_step_handler_by_chat_id(chat_id=message.chat.id, callback=copy_format)

Ответы

▲ 0

Попробуйте добавить

def copy_format(message):
    text2 = update.message.reply_text
    bot.update.message.reply_text(message.chat.id, caption=text2, entities=message.entities, parse_mode=ParseMode.MARKDOWN)
▲ 0

Есть только один способ (или я не нашел других):

При вводе формата пользователем, он должен ввести не как обычно __text__, а _text_. Или не **text**, а *text* и в таком случае Вам необходимо добавить в строку parse_mode = Markdown:

def copy_format(message):
    bot.send_message(message.chat.id, text=message.text, entities=message.entities, parse_mode="Markdown")

Что мы получаем:

введите сюда описание изображения

▲ 0

Нашёл способ. У объекта сообщения (Message) есть метод html_text. Не уверен насчёт markdown_text, но работает это следующим образом:

@bot.message_handler()
def handler(msg):
    formatted_text = msg.html_text
    print(html_text)
▲ 0

Легко! Сразу вставлю код, ниже поясню:

def copy_formatting(message: Message):

    bot.send_message(message.chat.id, message.text, entities=message.entities)

Поясняю: Объект класса telebot.types.Message обладает атрибутом entities, где хранится вся информация о форматировании (проверял, поддерживаются все виды, доступные в telegram). Такие методы как TeleBot.send_message(...) и TeleBot.edit_message_text(...) имеют аргументы entities, засчет чего можно сохранять и воспроизводить параметры форматирования текста.

Надеюсь, помог, всем хорошего дня!