---
url: https://docs.juniper.bot/message-templates/types.md
description: Базовые типы данных, используемые в шаблонном движке 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

# Базовые типы данных

В данном разделе описываются все базовые типы данных, используемые в шаблонном движке JuniperBot.

У некоторых типов данных методы могут иметь квоту вызовов. Квота означает сколько раз можно вызвать этот метод за
шаблон. Вызовы, превышающие указанную квоту, будут проигнорированы и не будут выполнять никаких действий.

## Примитивы { #literals }

Самыми базовыми выражениями являются примитивы, посмотрите на таблицу ниже:

| Название       | Примеры                                                   |
|----------------|-----------------------------------------------------------|
| Дробные числа  | `-1.5`, `5.7`, `1.0`                                      |
| Целые числа    | `-10`, `56`, `0`                                          |
| Нулевая ссылка | `null`                                                    |
| Логический тип | `true` или `false`                                        |
| Строка         | `"строка в двойных скобочках"``'строка в апострофах'` |
| Символ         | `'ф'`                                                     |

## Списки { #lists }

Объявить список можно либо упорядоченным перечислением элементов списка явно, либо указанием диапазона значений.

1. Для объявления упорядоченных списков значений или результатов выражений необходимо явно перечислить их через запятую в квадратных скобках:

   ```
   [1, 2, 3]
   ```

   Список, объявленный таким способом, является изменяемым. В таких списках доступны [методы](#lists-methods) для
   добавления, удаления, замены элементов и очистки списка.

2. Для объявления списка через диапазон значений необходимо указать лишь начальный и конечный элемент списка:

   ```
   [1..3]
   ```

   Список, объявленный таким способом, **неизменяемый**. Это своего рода кортеж, который удобно использовать, например,
   в [циклах](../advanced/tags#loops).

::: warning Внимание
Максимально допустимый размер списка ― 250 элементов.
:::

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

[Конвертация типов](type-convert) **не применяется** для методов списков:

```template
{{ [1..3].contains(1) }} - {{ [1..3].contains('1') }}
```

Данный шаблон вернёт `true - false`.

При работе со списками, особенно в методах, подразумевающих поиск, всегда следует учитывать тип данных.

::: warning Внимание
Модифицирующие методы доступны только для списков, созданных упорядоченным перечислением элементов по примеру выше.
:::

| Метод                      | Параметры                                                                       | Возвращает                            | Описание                                                                                                                                 |
|:---------------------------|:--------------------------------------------------------------------------------|:--------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------|
| `add(Элемент)`             | \[Число]\[Строка]\[Логический]                                           | \[Логический]                          | Добавляет указанный элемент в конец списка.Возвращает `true`, если элемент был добавлен.                                            |
| `addIfAbsent(Элемент)`     | \[Число]\[Строка]\[Логический]                                           | \[Логический]                          | Добавляет указанный элемент в конец списка, если этого элемента в списке нет.Возвращает `true`, если элемент был добавлен.          |
| `addAll(Список)`           | \[Список]                                                                        | \[Логический]                          | Добавляет все элементы указанного списка в конец текущего списка.Возвращает `true`, если в результате этого список был изменён.     |
| `replace(Индекс, Элемент)` | Индекс:\[Число]Элемент:\[Число]\[Строка]\[Логический] | \[Число]\[Строка]\[Логический] | Заменяет элемент по указанному индексу на указанное значение.Возвращает предыдущее значение этой позиции.                           |
| `remove(Элемент)`          | \[Число]\[Строка]\[Логический]                                           | \[Логический]                          | Удаляет первый найденный элемент из списка с указанным значением.Возвращает `true`, если элемент был удалён.                        |
| `removeAll(Список)`        | \[Список]                                                                        | \[Логический]                          | Удаляет все найденные элементы из списка.Возвращает `true`, если был удалён хотя бы один элемент.                                   |
| `removeAt(Индекс)`         | \[Число]                                                                         | \[Число]\[Строка]\[Логический] | Удаляет элемент по указанному индексу.Возвращает удалённый элемент списка.                                                          |
| `contains(Элемент)`        | \[Число]\[Строка]\[Логический]                                           | \[Логический]                          | Проверяет наличие указанного элемента в списке.Возвращает `true`, если такой элемент существует.                                    |
| `containsAll(Список)`      | \[Список]                                                                        | \[Логический]                          | Проверяет наличие всех указанных элементов в списке.Возвращает `true`, если указанные элементы существуют.                          |
| `containsAny(Список)`      | \[Список]                                                                        | \[Логический]                          | Проверяет наличие хотя бы одного из указанных элементов в списке.Возвращает `true`, если хотя бы один указанный элемент существует. |
| `indexOf(Элемент)`         | \[Число]\[Строка]\[Логический]                                           | \[Число]                               | Возвращает индекс элемента в списке или `-1` если такого элемента нет.                                                                   |
| `countOf(Элемент)`         | \[Число]\[Строка]\[Логический]                                           | \[Число]                               | Возвращает количество вхождений указанного элемента в список.                                                                            |
| `clear()`                  | -                                                                               | -                                     | Полностью очищает список.                                                                                                                |

## Карта (Map) { #maps }

Карта — это структура данных, в которой значения хранятся не по одному как в списке выше, а в паре "ключ - значение".
Ключом карты может быть любой идентификатор или строка, а значением — уже любое выражение. Объявляются карты следующим образом:

```
{ key1: 'value1', 'key 2': 'value2' }
```

Имейте в виду, что идентификаторы, представленные ключами, не являются названиями переменных, они всегда конвертируются
в их строковое представление. Таким образом идентификатор `key1` внутри карты будет строкой `"key1"`.

::: warning Внимание
Максимально допустимый размер карты ― 250 пар.
:::

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

[Конвертация типов](type-convert) **не применяется** для методов карт:

```template
{% set map = { key: 1 } %}
{{ map.containsValue(1) }} - {{ map.containsValue('1') }}
```

Данный шаблон вернёт `true - false`.

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

::: warning Внимание
Указанные методы доступны только для карт, созданных вручную по примеру выше.
:::

| Метод                         | Параметры                                                                       | Возвращает                            | Описание                                                                                                                                                                                             |
|:------------------------------|:--------------------------------------------------------------------------------|:--------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `put(Ключ, Значение)`         | Ключ:\[Строка]Значение:\[Число]\[Строка]\[Логический] | \[Число]\[Строка]\[Логический] | Добавляет в карту новую пару ключ-значение. Если указанный ключ уже есть в карте, заменяет его значение на новое.Возвращает предыдущее значение указанного ключа или `null` если такого не было |
| `putAll(Карта)`               | \[Карта]                                                                         | -                                     | Добавляет все элементы указанной карты в текущую.                                                                                                                                                    |
| `putIfAbsent(Ключ, Значение)` | Ключ:\[Строка]Значение:\[Число]\[Строка]\[Логический] | \[Число]\[Строка]\[Логический] | Добавляет новую пару ключ-значение только если значения для указанного ключа в карте ещё нет.Возвращает существующее значение указанного ключа или `null` если такого не было                   |
| `remove(Ключ)`                | \[Строка]                                                                        | \[Число]\[Строка]\[Логический] | Удаляет пару ключ-значение по указанному ключу.Возвращает предыдущее значение указанного ключа или `null` если такого не было                                                                   |
| `remove(Ключ, Значение)`      | Ключ:\[Строка]Значение:\[Число]\[Строка]\[Логический] | \[Логический]                          | Удаляет пару ключ-значение по указанному ключу и значению.Возвращает `true` если удаление успешно                                                                                               |
| `containsKey(Ключ)`           | \[Строка]                                                                        | \[Логический]                          | Возвращает `true`, если карта содержит указанный ключ.                                                                                                                                               |
| `containsValue(Значение)`     | \[Число]\[Строка]\[Логический]                                           | \[Логический]                          | Возвращает `true` если есть хотя бы один ключ с указанным значением.                                                                                                                                 |
| `clear()`                     | -                                                                               | -                                     | Полностью очищает карту                                                                                                                                                                              |

## DateTime { #datetime }

Этот тип данных описывает объект даты и времени и операции над ними.

### Свойства { #properties }

| Свойство         | Тип          | Описание                                |
|:-----------------|:-------------|:----------------------------------------|
| `millis`         | \[Число]      | Миллисекунды                            |
| `millisOfDay`    | \[Число]      | Миллисекунды дня                        |
| `millisOfSecond` | \[Число]      | Миллисекунды секунды                    |
| `secondOfDay`    | \[Число]      | Секунда дня                             |
| `secondOfMinute` | \[Число]      | Секунда минуты                          |
| `minuteOfDay`    | \[Число]      | Минута дня                              |
| `minuteOfHour`   | \[Число]      | Минута часа                             |
| `hourOfDay`      | \[Число]      | Час дня                                 |
| `dayOfMonth`     | \[Число]      | День месяца                             |
| `dayOfWeek`      | \[Число]      | День недели                             |
| `dayOfYear`      | \[Число]      | День в году                             |
| `weekOfWeekyear` | \[Число]      | Неделя в году                           |
| `weekyear`       | \[Число]      | Год с учетом недели \*                   |
| `monthOfYear`    | \[Число]      | Месяц в году                            |
| `year`           | \[Число]      | Год                                     |
| `yearOfCentury`  | \[Число]      | Год века                                |
| `yearOfEra`      | \[Число]      | Год эпохи                               |
| `centuryOfEra`   | \[Число]      | Век эпохи                               |
| `era`            | \[Число]      | Эпоха                                   |
| `zoneOffset`     | \[Число]      | Смещение часового пояса в миллисекундах |
| `isAfterNow`     | \[Логический] | `true` если дата в будущем              |
| `isBeforeNow`    | \[Логический] | `true` если дата в прошлом              |

::: info \* Год с учётом недели
В определенные годы первая неделя начинается в декабре, например, в декабре 1997 года. В другие годы первая неделя
начинается с 53-й недели предыдущего года, как, например, в январе 1999 года. В течение этих нескольких дней, когда
номер недели текущего года относится к предыдущему году, свойства `year` и `weekyear` возвращают разные значения.
:::

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

Методы ниже не модифицирует текущий экземпляр, а возвращают новый.

| Метод                    | Параметры  | Возвращает   | Описание                                                          |
|:-------------------------|:-----------|:-------------|:------------------------------------------------------------------|
| `plusMillis(Значение)`   | \[Число]    | \[DateTime]   | Возвращает копию этой даты плюс указанное количество миллисекунд  |
| `plusSeconds(Значение)`  | \[Число]    | \[DateTime]   | Возвращает копию этой даты плюс указанное количество секунд       |
| `plusMinutes(Значение)`  | \[Число]    | \[DateTime]   | Возвращает копию этой даты плюс указанное количество минут        |
| `plusHours(Значение)`    | \[Число]    | \[DateTime]   | Возвращает копию этой даты плюс указанное количество часов        |
| `plusDays(Значение)`     | \[Число]    | \[DateTime]   | Возвращает копию этой даты плюс указанное количество дней         |
| `plusWeeks(Значение)`    | \[Число]    | \[DateTime]   | Возвращает копию этой даты плюс указанное количество недель       |
| `plusMonths(Значение)`   | \[Число]    | \[DateTime]   | Возвращает копию этой даты плюс указанное количество месяцев      |
| `plusYears(Значение)`    | \[Число]    | \[DateTime]   | Возвращает копию этой даты плюс указанное количество лет          |
| `minusMillis(Значение)`  | \[Число]    | \[DateTime]   | Возвращает копию этой даты минус указанное количество миллисекунд |
| `minusSeconds(Значение)` | \[Число]    | \[DateTime]   | Возвращает копию этой даты минус указанное количество секунд      |
| `minusMinutes(Значение)` | \[Число]    | \[DateTime]   | Возвращает копию этой даты минус указанное количество минут       |
| `minusHours(Значение)`   | \[Число]    | \[DateTime]   | Возвращает копию этой даты минус указанное количество часов       |
| `minusDays(Значение)`    | \[Число]    | \[DateTime]   | Возвращает копию этой даты минус указанное количество дней        |
| `minusWeeks(Значение)`   | \[Число]    | \[DateTime]   | Возвращает копию этой даты минус указанное количество недель      |
| `minusMonths(Значение)`  | \[Число]    | \[DateTime]   | Возвращает копию этой даты минус указанное количество месяцев     |
| `minusYears(Значение)`   | \[Число]    | \[DateTime]   | Возвращает копию этой даты минус указанное количество лет         |
| `isAfter(Дата)`          | \[DateTime] | \[Логический] | Является ли эта дата позже указанной                              |
| `isBefore(Дата)`         | \[DateTime] | \[Логический] | Является ли эта дата раньше указанной                             |
