---
url: /reference/menu-builder.md
description: >-
MenuBuilder — меню выбора в пользовательских командах Telegram, собранное из
кнопок-вариантов.
---
# MenuBuilder
Построитель меню выбора. Создается функцией select_menu(тип, id, подсказка, действие, неактивное?). В Telegram нет выпадающих списков, поэтому бот рисует меню кнопками-вариантами под сообщением. Руководство — в статье Кнопки и меню выбора.
```template
{% do select_menu('STRING', 'mode', 'Выбери режим', 'self')
.addOption('Броулбол', 'brawlball', '⚽')
.addOption('Нокаут', 'knockout', '🎯')
.withDefaultOption('brawlball') %}
```
Когда участник нажимает вариант, запускается действие меню: `component.type` равен `SELECTION_MENU`, а `component.selectedOptions` — список с выбранным значением.
## Типы меню { #types }
| Тип | Варианты |
|---|---|
| `STRING` | Ваши варианты из `addOption` |
| `ROLE` | Роли бота |
| `USER`, `CHANNEL`, `MENTIONABLE` | Не поддерживаются в Telegram — ошибка `unsupported_in_telegram` |
## Методы { #methods }
| Метод | Описание |
|---|---|
| `addOption(надпись, значение, эмодзи?, описание?)` | Добавить вариант. Описание в Telegram не показывается. До 25 вариантов |
| `withDefaultOption(значение)` | Отметить вариант галочкой ✓ |
| `endMenu()` | Завершить меню и вернуться к построителю сообщения — нужно, если меню строится внутри `createMessage()` |
| `withMinValues(n)`, `withMaxValues(n)`, `withRequiredRange(мин, макс)` | Выбор нескольких вариантов с кнопкой «Готово» |
| `withChannelTypes(…)` | Не поддерживается — в Telegram нет каналов |