Как можно сохранить форматирование текста в боте Aiogram?

Здравствуйте!

У меня есть бот на Aiogram, который отправляет информационные сообщения подписчикам. Бот работает, но не сохраняет форматирование текста (жирный, курсив) и не отображает ссылки в рассылаемых сообщениях. Что нужно изменить, чтобы бот сохранял форматирование текста и ссылки? Ссылка на Github. Спасибо!
  • 27 января 2024 г. 19:28
Ответы на вопрос 2
Для сохранения форматирования текста в боте, использующем библиотеку Aiogram и отправки сообщений в формате Markdown или HTML, вам необходимо использовать параметр `parse_mode` в методах отправки сообщений. Этот параметр позволяет указать, как бот должен интерпретировать форматирование текста.

Aiogram поддерживает несколько режимов форматирования:

1. `Markdown` или `MarkdownV2`
2. `HTML`

Вы можете указать режим форматирования глобально при инициализации объекта `Bot`, или локально при отправке каждого сообщения.

Пример использования глобального parse_mode:

```python
from aiogram import Bot, Dispatcher, executor, types

API_TOKEN = 'ВАШ_TELEGRAM_API_TOKEN'
bot = Bot(token=API_TOKEN, parse_mode=types.ParseMode.HTML) # Установка глобального формата
dp = Dispatcher(bot)

# ... ваш код ...

```

Пример отправки сообщения с форматированием в HTML:

```python
await bot.send_message(chat_id, "Подсветка <b>жирным</b> и <i>курсивом</i>", parse_mode='HTML')
```

И отправки сообщения с Markdown форматированием (MarkdownV2):

```python
await bot.send_message(chat_id, "Подсветка *жирным* и _курсивом_", parse_mode='MarkdownV2')
```

Если вы используете глобальный parse_mode, вы можете опустить параметр `parse_mode` в методах отправки сообщений, так как он уже задан по умолчанию для всего бота.

Чтобы корректно отобразить ссылку в HTML-форматированном сообщении, используйте следующий формат:

```python
await bot.send_message(chat_id, 'Посетите <a href="https://example.com">наш веб-сайт</a>!', parse_mode='HTML')
```

И для MarkdownV2 форматирования (обратите внимание на экранирование специальных символов):

```python
await bot.send_message(chat_id, 'Посетите [наш веб-сайт](https://example.com)', parse_mode='MarkdownV2')
```

Проверьте ваш код и убедитесь, что вы используете корректный формат тегов и специальные символы экранированы в соответствии с выбранным форматом текста (особенно для MarkdownV2).

Напоследок, не забывайте соблюдать осторожность с автоматической обработкой пользовательского ввода, чтобы избежать потенциальных уязвимостей, связанных с инъекцией кода.
У тебя какая версия aiogram, вторая или третья? 
Если вторая, то смотри параметр parse_mode у send_message().
parse_mode (typing.Union[base.String, None]) – Send Markdown or HTML, if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in your bot’s message.


Насчёт третьей версии я не в курсе, но наверняка тоже надо parse_mode указать.
Похожие вопросы