---
url: /reference/message-builder.md
description: MessageBuilder — сборка rich-сообщения из блоков через createMessage().
---
# MessageBuilder
Построитель сообщения: позволяет собрать сообщение методами и отправить его прямо из шаблона — например, в другой топик. Создается вызовом chat.createMessage() или topic.createMessage().
Методы возвращают тот же построитель, поэтому их пишут цепочкой и заканчивают `send()`:
```template
{% set winner = arguments.targetMember %}
{% require winner returning 'Кто победил? Ответь командой на его сообщение' %}
{% do chat.createMessage()
.heading('Итоги турнира', 2)
.paragraph('Победитель — ' ~ winner.name)
.table([['Уровень', winner.rank.level], ['Место в чате', winner.rank.rank]], { bordered: true })
.footer('Поздравляем!')
.send() %}
```
Отправок из шаблона — не больше 3 за выполнение. В чате с режимом Text блоки [упрощаются](/templates/advanced/rich#text-mode).
## Блоки: createMessage() { #blocks }
| Метод | Блок |
|---|---|
| `.heading(текст, размер)` | Заголовок 1–6 |
| `.paragraph(текст)` | Абзац |
| `.list(элементы, нумерованный?)` | Список |
| `.checklist(элементы)` | Чек-лист |
| `.table(строки, настройки?)` | Таблица — настройки как у функции [`table`](/templates/advanced/functions#table) |
| `.quote(текст, автор?, раскрывающаяся?)` | Цитата |
| `.pullquote(текст, автор?)` | Выноска |
| `.details(заголовок, содержимое, открыт?)` | Сворачиваемый блок |
| `.divider()` | Разделитель |
| `.footer(текст)` | Подвал |
| `.math(выражение)` | Формула |
| `.photo(ссылка, подпись?, спойлер?)` | Фото |
| `.video(…)`, `.animation(…)`, `.audio(…)`, `.voice(…)`, `.document(…)` | Другие медиа |
| `.collage(медиа, подпись?)`, `.slideshow(медиа, подпись?)` | Коллаж, слайдшоу |
| `.map(широта, долгота, масштаб?, подпись?)` | Карта |
| `.buttonRow(кнопки, выравнивание?)` | Ряд кнопок внутри сообщения |
| `.button(…)` | Кнопка под сообщением — аргументы как у функции `button` |
## Доставка { #delivery }
| Метод | Что делает |
|---|---|
| `.inTopic(id)` | Отправить в топик |
| `.replyTo(id)` | Ответом на сообщение |
| `.silent()` | Без звука |
| `.protect()` | Запретить пересылку и сохранение |
| `.pin()` | Закрепить |
| `.deleteAfter(секунды)` | Удалить через N секунд |
| `.ephemeral(id_участника)` | Показать только одному участнику |
| `.rtl()` | Текст справа налево |
| `.send()` | Отправить |
| `.sendAndGet()` | Отправить и вернуть отправленное [сообщение](./message) |
Несобранный построитель можно вернуть из `require … returning` или `return` — тогда он станет сообщением об ошибке.