Как написать текст сообщения для Телеграм чат бота, чтобы его синтаксис распознавался мессенджером и размечался в соответствии с ним?
Мне нужно в одном сообщении дать текст и маркдаун-таблицу. Всё бы ничего, но это должен делать Телеграм чат бот.
Имеется в виду, что бот в качестве реакции на определенные команды или клавиши инлайн клавиатуры должен отправлять в соответствующий чат текстовое сообщение, содержащее маркдаун-таблицу. И текст, и таблица всякий раз одни и те же.
Когда я сам, как пользователь, ввожу в интерфейс Телеграм текст сообщения с таблицей, окружённой ``` с обеих сторон, всё выглядит красиво, мессенджер распознаёт и отображает маркдаун. Однако, передавая это же сообщение при помощи await bot.send_message(message.chat.id, text_with_markdown_table)
, я раз за разом наблюдаю, как вместо ожидаемой "красоты" в чат приходит обычный неотформатированный текст.
Пробовал оставлять в сообщении только таблицу в окружении ``` - не помогло.
Как пофиксить?
Ответы (2 шт):
Не совсем понятна логика работы бота, но постараюсь ответить. Если необходимо вывести просто фиксированную таблицу, то это можно реализовать вот таким образом:
import telebot
TOKEN = ' '
bot = telebot.TeleBot(TOKEN)
@bot.message_handler(commands=['table'])
def send_table(message):
text_with_markdown_table = """
```
| Заголовок 1 | Заголовок 2 |
|-------------|-------------|
| Строка 1 | Строка 1 |
| Строка 2 | Строка 2 |
```
"""
bot.send_message(message.chat.id, text_with_markdown_table, parse_mode='Markdown')
bot.polling()
Если надо реализовать динамическую таблицу, с указанием количества строк и столбцов, то:
import telebot
TOKEN = ' '
bot = telebot.TeleBot(TOKEN)
@bot.message_handler(commands=['table'])
def send_table(message):
try:
_, rows, cols = message.text.split()
rows = int(rows)
cols = int(cols)
except ValueError:
bot.send_message(message.chat.id, "Некорректный формат команды. Используйте /table <количество строк> <количество столбцов>")
return
except Exception as e:
bot.send_message(message.chat.id, f"Ошибка: {e}")
return
headers = "|"
col_widths = [10] * cols # Начальная ширина столбцов
for j in range(cols):
headers += f" Заголовок {j+1} |"
headers += "\n"
# Разделительная строка
separator = "|"
for width in col_widths:
separator += "-" * (width + 2) + "|"
separator += "\n"
table_text = "Таблица:\n```\n"
table_text += headers
table_text += separator
for i in range(1, rows + 1):
table_text += "|"
for j in range(cols):
cell_content = f" Строка {i} ".strip()
col_widths[j] = max(col_widths[j], len(cell_content)) # Обновляем ширину столбца
table_text += f" {cell_content.ljust(col_widths[j])} |"
table_text += "\n"
table_text += "```"
bot.send_message(message.chat.id, table_text, parse_mode='Markdown')
bot.polling()
Укажите parse_mode
: await bot.send_message(message.chat.id, text_with_markdown_table, parse_mode='MarkdownV2')