---
url: https://docs.juniper.bot/message-templates/types/discord/menu-builder.md
description: Тип данных MenuBuilder, используемый в шаблонном движке JuniperBot.
---

[Число]: /message-templates/types/index#literals

[Строка]: /message-templates/types/index#literals

[Логический]: /message-templates/types/index#literals

[Список]: /message-templates/types/index#lists

[Карта]: /message-templates/types/index#maps

[DateTime]: /message-templates/types/index#datetime

[TwitchChannel]: /message-templates/types/subscriptions/twitch#twitch-channel

[TwitchStream]: /message-templates/types/subscriptions/twitch#twitch-stream

[TwitchGame]: /message-templates/types/subscriptions/twitch#twitch-game

[YouTubeChannel]: /message-templates/types/subscriptions/youtube#youtube-channel

[YouTubeVideo]: /message-templates/types/subscriptions/youtube#youtube-video

[VkWallPost]: /message-templates/types/subscriptions/vk#vkwallpost

[Rank]: /message-templates/types/discord/rank

[Guild]: /message-templates/types/discord/guild

[Member]: /message-templates/types/discord/member

[Role]: /message-templates/types/discord/role

[Message]: /message-templates/types/discord/message

[Attachment]: /message-templates/types/discord/attachment

[Embed]: /message-templates/types/discord/embed

[Activity]: /message-templates/types/discord/activity

[MemberVoiceState]: /message-templates/types/discord/member-voice-state

[MemberPrimaryGuild]: /message-templates/types/discord/member-primary-guild

[MenuBuilder]: /message-templates/types/discord/menu-builder

[UserFlag]: /message-templates/types/discord/user-flag

[Permission]: /message-templates/types/discord/permission

[Category]: /message-templates/types/discord/category

[TextChannel]: /message-templates/types/discord/text-channel

[VoiceChannel]: /message-templates/types/discord/voice-channel

[NewsChannel]: /message-templates/types/discord/news-channel

[StageChannel]: /message-templates/types/discord/stage-channel

[ForumChannel]: /message-templates/types/discord/forum-channel

[MediaChannel]: /message-templates/types/discord/media-channel

[ThreadChannel]: /message-templates/types/discord/thread-channel

[Page]: /message-templates/types/storage/page

[GuildIndex]: /message-templates/types/storage/guild-index

[GuildIndexEntry]: /message-templates/types/storage/guild-index-entry

[GuildIndexes]: /message-templates/types/storage/guild-indexes

[MemberAttribute]: /message-templates/types/storage/member-attribute

[MemberAttributes]: /message-templates/types/storage/member-attributes

[Arguments]: /message-templates/types/custom-commands/arguments

[Parameters]: /message-templates/types/custom-commands/parameters

[Component]: /message-templates/types/custom-commands/component

[Modal]: /message-templates/types/custom-commands/modal

# MenuBuilder

::: tip Бонусная возможность
Компоненты меню доступны только на сервере с [бонусом за поддержку](https://juniper.bot/donate)!
:::

Этот тип данных используется для построения компонента меню выбора. Большинство методов возвращают этот же MenuBuilder, поэтому можно строить цепочки вроде:

```template
{% do channel
    .createEmbed()
    .withDescription('О! Привет!')
    .addSelectMenu('STRING', 'selectedSpecies', 'Кто ты?', '27a55ca1-c13b-47f5-b8ad-e0da6329a53f')
      .addOption('Выдра', 'otterOption', ':otter:')
      .addOption('Лиса', 'foxOption', ':fox_face:')
      .withDefaultOption('foxOption')
    .endMenu()
    .send()
%}
```

## Методы { #methods }

### `withMinValues(Количество)`  { #method-withminvalues .template-method }

::: tabs

\== Описание | mdi-text

Устанавливает минимальное количество элементов для выбора (от 0 до 25, по-умолчанию 1).

**Возвращаемые типы:** \[MenuBuilder]

\== Параметры | mdi-code-parentheses

| Параметр     | Тип     | Описание                         |
|:-------------|:--------|:---------------------------------|
| `Количество` | \[Число] | Минимальное количество элементов |

\== Пример | mdi-code-block-braces

```template{5}
{% do channel
    .createEmbed()
    .withDescription('О! Привет!')
    .addSelectMenu('CHANNEL', 'selectedChannels', 'Выбери каналы', '27a55ca1-c13b-47f5-b8ad-e0da6329a53f')
      .withMinValues(2)
      .withMaxValues(3)
      .withChannelTypes(['VOICE', 'TEXT'])
    .endMenu()
    .send()
%}
```

:::

### `withMaxValues(Количество)`  { #method-withmaxvalues .template-method }

::: tabs

\== Описание | mdi-text

Устанавливает максимальное количество элементов для выбора (от 1 до 25, по-умолчанию 1).

**Возвращаемые типы:** \[MenuBuilder]

\== Параметры | mdi-code-parentheses

| Параметр     | Тип     | Описание                          |
|:-------------|:--------|:----------------------------------|
| `Количество` | \[Число] | Максимальное количество элементов |

\== Пример | mdi-code-block-braces

```template{6}
{% do channel
    .createEmbed()
    .withDescription('О! Привет!')
    .addSelectMenu('CHANNEL', 'selectedChannels', 'Выбери каналы', '27a55ca1-c13b-47f5-b8ad-e0da6329a53f')
      .withMinValues(2)
      .withMaxValues(3)
      .withChannelTypes(['VOICE', 'TEXT'])
    .endMenu()
    .send()
%}
```

:::

### `withRequiredRange(Минимум, Максимум)`  { #method-withrequiredrange .template-method }

::: tabs

\== Описание | mdi-text

Устанавливает диапазон количества элементов для выбора (объединение двух предыдущих методов в один).

**Возвращаемые типы:** \[MenuBuilder]

\== Параметры | mdi-code-parentheses

| Параметр   | Тип     | Описание                                                       |
|:-----------|:--------|:---------------------------------------------------------------|
| `Минимум`  | \[Число] | Минимальное количество элементов (от 0 до 25, по-умолчанию 1)  |
| `Максимум` | \[Число] | Максимальное количество элементов (от 1 до 25, по-умолчанию 1) |

\== Пример | mdi-code-block-braces

```template{5}
{% do channel
    .createEmbed()
    .withDescription('О! Привет!')
    .addSelectMenu('CHANNEL', 'selectedChannels', 'Выбери каналы', '27a55ca1-c13b-47f5-b8ad-e0da6329a53f')
      .withRequiredRange(2, 3)
      .withChannelTypes(['VOICE', 'TEXT'])
    .endMenu()
    .send()
%}
```

:::

### `addOption(Наименование, Значение, Эмоция, Описание)`  { #method-addoption .template-method }

::: tabs

\== Описание | mdi-text

Добавляет вариант выбора для меню типа `STRING` (максимум 25).

**Возвращаемые типы:** \[MenuBuilder]

\== Параметры | mdi-code-parentheses

| Параметр       | Тип      | Описание                                                                                                                                                                                                                                                                  |
|:---------------|:---------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `Наименование` | \[Строка] | Наименование варианта выбора                                                                                                                                                                                                                                              |
| `Значение`     | \[Строка] | Значение варианта выбора                                                                                                                                                                                                                                                  |
| `Эмоция`       | \[Строка] | Эмоция в одном из следующих форматах:`🦊` — Unicode-символ эмоции;`:fox_face:` — название эмоции, включая стандартные и пользовательские на сервере;`<a:foxwaggy:695917473874051112>` — код пользовательской эмоции.(Опционально) |
| `Описание`     | \[Строка] | Описание варианта выбора(Опционально)                                                                                                                                                                                                                                |

\== Пример | mdi-code-block-braces

```template{5,6}
{% do channel
    .createEmbed()
    .withDescription('О! Привет!')
    .addSelectMenu('STRING', 'selectedSpecies', 'Кто ты?', '27a55ca1-c13b-47f5-b8ad-e0da6329a53f')
      .addOption('Выдра', 'otterOption', ':otter:')
      .addOption('Лиса', 'foxOption', ':fox_face:')
    .endMenu()
    .send()
%}
```

:::

### `withDefaultOptions(Элементы)`  { #method-withdefaultoptions .template-method }

::: tabs

\== Описание | mdi-text

Устанавливает выбранные по-умолчанию элементы меню.

**Возвращаемые типы:** \[MenuBuilder]

\== Параметры | mdi-code-parentheses

| Параметр   | Тип                | Описание                                                                                                                                                                   |
|:-----------|:-------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `Элементы` | \[Список]<\[Строка]> | Для меню типа `STRING` — список значений вариантов выбора;Для остальных типов меню — идентификаторы каналов, ролей или участников |

\== Пример | mdi-code-block-braces

```template{9}
{% do channel
    .createEmbed()
    .withDescription('О! Привет!')
    .addSelectMenu('STRING', 'selectedSpecies', 'Кто тебе нравится?', '27a55ca1-c13b-47f5-b8ad-e0da6329a53f')
      .addOption('Выдра', 'otterOption', ':otter:')
      .addOption('Лиса', 'foxOption', ':fox_face:')
      .addOption('Оса', 'beeOption', ':bee:')
      .withMaxValues(3)
      .withDefaultOptions(['foxOption', 'otterOption'])
    .endMenu()
    .send()
%}
```

:::

### `withDefaultOption(Элемент)`  { #method-withdefaultoption .template-method }

::: tabs

\== Описание | mdi-text

Устанавливает один выбранный по-умолчанию элемент меню.

**Возвращаемые типы:** \[MenuBuilder]

\== Параметры | mdi-code-parentheses

| Параметр  | Тип      | Описание                                                                                                                                                       |
|:----------|:---------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `Элемент` | \[Строка] | Для меню типа `STRING` — значение варианта выбора;Для остальных типов меню — идентификатор канала, роли или участника |

\== Пример | mdi-code-block-braces

```template{7}
{% do channel
    .createEmbed()
    .withDescription('О! Привет!')
    .addSelectMenu('STRING', 'selectedSpecies', 'Кто ты?', '27a55ca1-c13b-47f5-b8ad-e0da6329a53f')
      .addOption('Выдра', 'otterOption', ':otter:')
      .addOption('Лиса', 'foxOption', ':fox_face:')
      .withDefaultOption('foxOption')
    .endMenu()
    .send()
%}
```

:::

### `withChannelTypes(Типы)`  { #method-withchanneltypes .template-method }

::: tabs

\== Описание | mdi-text

Устанавливает типы каналов для выбора в меню типа `CHANNEL`.

**Возвращаемые типы:** \[MenuBuilder]

\== Параметры | mdi-code-parentheses

| Параметр | Тип                | Описание                                                                                                                                                                            |
|:---------|:-------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `Типы`   | \[Список]<\[Строка]> | `TEXT` — текстовые;`NEWS` — новостные;`VOICE` — голосовые;`STAGE` — трибуны;`CATEGORY` — категории;`FORUM` — форумы. |

\== Пример | mdi-code-block-braces

```template{6}
{% do channel
    .createEmbed()
    .withDescription('О! Привет!')
    .addSelectMenu('CHANNEL', 'selectedChannels', 'Выбери каналы', '27a55ca1-c13b-47f5-b8ad-e0da6329a53f')
      .withRequiredRange(2, 3)
      .withChannelTypes(['VOICE', 'TEXT'])
    .endMenu()
    .send()
%}
```

:::

### `withChannelType(Тип)`  { #method-withchanneltype .template-method }

::: tabs

\== Описание | mdi-text

Устанавливает один тип каналов для выбора в меню типа `CHANNEL`.

**Возвращаемые типы:** \[MenuBuilder]

\== Параметры | mdi-code-parentheses

| Параметр | Тип      | Описание                                                                                                                                                                            |
|:---------|:---------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `Тип`    | \[Строка] | `TEXT` — текстовые;`NEWS` — новостные;`VOICE` — голосовые;`STAGE` — трибуны;`CATEGORY` — категории;`FORUM` — форумы. |

\== Пример | mdi-code-block-braces

```template{6}
{% do channel
    .createEmbed()
    .withDescription('О! Привет!')
    .addSelectMenu('CHANNEL', 'selectedChannels', 'Выбери каналы', '27a55ca1-c13b-47f5-b8ad-e0da6329a53f')
      .withRequiredRange(2, 3)
      .withChannelType('TEXT')
    .endMenu()
    .send()
%}
```

:::

### `endMenu()`  { #method-endmenu .template-method }

::: tabs

\== Описание | mdi-text

Возвращает объект Embed, к которому это меню относится. Используется для продолжения построения цепочки методов Embed.

**Возвращаемые типы:** \[Embed]

\== Пример | mdi-code-block-braces

```template{7}
{% do channel
    .createEmbed()
    .withDescription('О! Привет!')
    .addSelectMenu('STRING', 'selectedSpecies', 'Кто ты?', '27a55ca1-c13b-47f5-b8ad-e0da6329a53f')
      .addOption('Выдра', 'otterOption', ':otter:')
      .addOption('Лиса', 'foxOption', ':fox_face:')
    .endMenu()
    .send()
%}
```

:::
