Перейти к содержанию

Функции

Описание всех глобальных функций шаблонного движка JuniperBot


Логические функции#

defined#

Данная функция полезна для проверки определено ли указанное выражение или нет. Возвращает true если выражение определено и false в противном случае.

{% if (defined([1, 2][5])) %}YES{% else %}NO{% endif %}

Предыдущий пример распечатает NO, так как индекс 5 списка [1, 2] не определен.

even#

Эта функция очень простая, она ожидает число и возвращает true, если это число чётное и false, если нечётное.

{% if (even(2)) %}A{% else %}B{% endif %}

Предыдущий пример распечатает A, так как 2 — чётное число.

odd#

Это противоположная even функция. Она ожидает число и возвращает true, если число нечётное и false, если чётное.

{% if (odd(2)) %}A{% else %}B{% endif %}

Предыдущий пример распечатает B, так как 2 — чётное число.

iterable#

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

{% if (iterable(2)) %}A{% else %}B{% endif %}

Предыдущий пример распечатает B, так как 2 не список и не карта, а простое число.

number#

Эта функция позволяет проверить, является ли аргумент числом или конвертируемым в число объектом.

{% if (number(2)) %}A{% else %}B{% endif %}

Предыдущий пример распечатает A, так как 2 является числом.

empty#

Функция ожидает любой объект и возвращает true, если аргумент является:

  • null
  • Undefined
  • Пустым списком
  • Пустой картой
  • Числом 0
{% if (empty([1, 2])) %}A{% else %}B{% endif %}

Предыдущий пример распечатает B, так как [1, 2] — не пустой список.


Математические функции#

abs#

Математическая функция, позволяющая получить модуль выражения. Например, {{ abs(-1) }} выведет 1. Ожидает только один аргумент-число.

round#

Функция округления дробного числа к целому. Опционально можно указать стратегию округления вторым аргументом:

  • 'CEIL' — округление до большего целого;
  • 'FLOOR' — округление до меньшего целого.
{{ round(1.3, 'CEIL') }}

Предыдущий пример распечатает 2. Стратегия округления нечувствительна к регистру, поэтому можно написать как 'CEIL', так и 'ceil'. Если второй аргумент не указан, число округляется до ближайшего целого.


Операции над строками#

number_format#

Функция number_format позволяет форматировать указанное число с указанными символами для разделителей группы разрядов и дробной части, а также с указанным количеством дробных цифр. Эта функция ожидает как минимум один аргумент и до четырех. Список аргументов в том порядке, как они ожидаются функцией:

  1. Число для форматирования;
  2. Количество дробных цифр (опционально);
  3. Разделитель дробной части (опционально);
  4. Разделитель группы разрядов (опционально);
{{ number_format(11000.136, 2, '.', ' ') }}

Предыдущий пример распечатает 11 000.14.

capitalize#

Эта функция капитализации строки ожидает один аргумент. В результате выполнения функции первое слово строки станет с заглавной буквы.

{{ capitalize('hello world') }}

Предыдущий пример распечатает Hello world.

format#

Данная функция принимает строку-шаблон, форматируя её с помощью переданных последующих аргументов. Более подробно о форматировании строк можно почитать в интернете.

{{ format('hello %s! %s', 'world', 123) }}

Предыдущий пример распечатает hello world! 123.

lower#

Преобразует переданную строку в нижний регистр.

{{ lower('JUNIPERBOT') }}

Предыдущий пример распечатает juniperbot.

upper#

Преобразует переданную строку в верхний регистр.

{{ upper('juniperbot') }}

Предыдущий пример распечатает JUNIPERBOT.

replace#

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

{{ replace('Hello %name%', { '%name%': 'world' }) }}

Предыдущий пример распечатает Hello world.

split#

Данная функция ожидает два аргумента. Используя второй аргумент как разделитель, она разбивает первый аргумент-строку в список.

В качестве разделителя используется регулярное выражение.

{{ split('juniper-bot', '-') }}

Предыдущий пример распечатает [juniper, bot].

title#

Эта функция преобразует каждое слово входной строки так, что оно будет начинаться с заглавной буквы.

{{ title('hello world') }}

Предыдущий пример распечатает Hello World.

trim#

Эта функция избавит входную строку от пробелов в начале и в конце этой строки.

{{ trim('  Hello World  ') }}

Предыдущий пример распечатает Hello World без пробелов.

startsWith#

Эта функция проверяет, начинается ли одна строка с другой указанной строки.

{{ startsWith('hello', 'he') }}

Предыдущий пример вернет true, поскольку hello начинается с he.

Она также может принимать третий логический аргумент как признак того, нужно ли сравнивать строки без учета регистра:

{{ startsWith('HELLO', 'he', true) }}

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

endsWith#

Эта функция проверяет, заканчивается ли одна строка другой указанной строкой.

{{ endsWith('hello', 'lo') }}

Предыдущий пример вернет true, поскольку hello заканчивается на lo.

Функция также может принимать третий логический аргумент как признак того, нужно ли сравнивать строки без учета регистра:

{{ endsWith('hello', 'LO', true) }}

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

contains#

Эта функция проверяет, содержит ли одна строка другую подстроку.

{{ contains('Hey there!', 'there') }}

Предыдущий пример вернет true, поскольку строка Hey there! содержит подстроку there.

Функция также может принимать третий логический аргумент как признак того, нужно ли сравнивать строки без учета регистра:

{{ contains('Hey THERE!', 'there', true) }}

Предыдущий пример вернет true, поскольку строка Hey THERE! содержит подстроку there без учета регистра.

plural#

Эта функция поможет правильно выбрать нужную количественную форму слова или словосочетания в зависимости от указанного числа и языка (количественные числительные). Команда принимает до восьми аргументов, набор которых зависит от выбранного языка.

Первые два аргумента постоянные: число и язык (en — Английский, ru — Русский). Остальные аргументы зависят от выбранного языка:

Для английского языка#

  • Форма в единственном числе
  • Форма во множественном числе
2 {{ plural(2, 'en', 'day', 'days') }}

Предыдущий пример распечатает 2 days.

Для русского языка#

  • Форма для чисел вида 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001 (1 день, 51 день)
  • Форма для чисел вида 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002 (2 дня, 33 дня)
  • Форма для чисел вида 0, 5~19, 100, 1000, 10000, 100000, 1000000 (0 дней, 7 дней, 100 дней)
  • Общая форма в родительном падеже (1.5 дня)
2 {{ plural(2, 'ru', 'день', 'дня', 'дней', 'дня') }}

Предыдущий пример распечатает 2 дня.


Смешанные функции#

random#

Эта функция возвращает произвольный элемент из переданного списка или произвольное число из указанного диапазона.

{{ random(['раз', 'два', 'три']) }}

Предыдущий пример распечатает один из элементов раз, два или три случайно.

{{ random(10, 20) }}

Предыдущий пример распечатает случайное целое число от 10 до 20 включительно.

first#

Эта функция вернет первый элемент указанного списка или первый символ строки. Если переданный аргумент не список и не строка, функция просто вернет этот аргумент. Если указанный аргумент — пустой список или строка, тогда функция возвращает Undefined.

{{ first([1, 2]) }}

Предыдущий пример распечатает 1.

last#

Эта функция вернет последний элемент указанного списка или последний символ строки. Если переданный аргумент не список и не строка, функция просто вернет этот аргумент. Если указанный аргумент — пустой список или строка, тогда функция возвращает Undefined.

{{ last([1, 2]) }}

Предыдущий пример распечатает 2.

reverse#

Эта функция возвращает перевернутый в обратном порядке список или строку. Если переданный аргумент не список и не строка, функция просто вернет этот аргумент.

{{ reverse([1, 2]) }}

Предыдущий пример распечатает[2, 1].

default#

Эта функция ожидает два аргумента. Она возвращает второй аргумент, если первый null или Undefined.

{{ default(null, 'Hello') }} {{ default(undefinedVariable, 'World') }}

Предыдущий пример распечатает Hello World, поскольку переменная undefinedVariable не объявлена.

length#

Эта функция возвращает размер указанного списка или длину указанной строки. Если аргумент не является строкой или списком, она возвращает0 для null и Undefined, для остальных случаев 1.

{{ length([1, 2]) }}
{{ length(null) }}
{{ length(9) }}

Предыдущий пример распечатает 2, 0 и 1 соответственно.


Списки и карты#

batch#

Эта функция разделяет переданный список на равные группы списков. Она ожидает два аргумента:

  • Первый аргумент — сам список;
  • Второй аргумент — размер группы, на которые будет поделен этот список;
{{ batch([1,2,3], 2) }}

Предыдущий пример распечатает [[1, 2], [3]].

concat or concatenate#

Эта функция объединит множество строк в одну строку.

{{ concat('1', '+', '1', '=', '2') }}

Предыдущий пример распечатает 1+1=2.

join#

Эта функция похоже на concat, но объединяет элементы переданного списка в одну строку через разделитель. Функция принимает один или два аргумента. Первый аргумент — сам список, а второй — разделитель, которым нужно объединить элементы этого списка в строку. Если второй аргумент не указан, используется , в качестве разделителя (запятая с пробелом).

{{ join([1, null, 2], '|') }}

Предыдущий пример распечатает 1|2. Обратите внимание, что функция игнорирует значение null.

keys#

Эта функция возвращает значения ключей для указанной коллекции (списка или карты). Для списков ключами являются индексы элементов.

{{ keys(['A', 'B']) }}

Предыдущий пример распечатает [1, 2].

slice#

Эта функция возвращает подстроку или часть списка и ожидает три аргумента, где первый аргумент — список или строка, а второй и третий — числа.

{{ slice("123", 1, 1) }}
{{ slice([1, 2, 3], 0, 2) }}

Второй аргумент — индекс позиции первого символа или элемента списка (включительно), а третий — длина ожидаемой подстроки или подсписка. Как показано на предыдущих двух примерах, они распечатают "2" и [1, 2] соответственно. Обратите внимание, что функция безопасна для выходящих за размеры значений, например:

{{ slice("123", 2, 3) }}
{{ slice("123", 5, 1) }}

Предыдущие примеры все еще распечатает подстроки "3" и "" соответственно.

sort#

Эта функция отсортирует переданный список по возрастанию.

{{ sort([1, 3, 2]) }}

Предыдущий пример распечатает [1, 2, 3].


Дата и время#

date#

Эта функция форматирует переданную дату в указанный формат. Функция принимает от одного до трёх аргументов:

  • Объект даты, временная метка или строка 'now' если нужна текущая дата;
  • (Опционально) Формат даты на базе SimpleDateFormat из языка Java. Более подробно можно ознакомиться здесь;
  • (Опционально) Часовой пояс даты в формате TZ Database. Если не указан, используется часовой пояс сервера, настроенный в панели управления.
{{ date('now', 'EEE, d MMM yyyy HH:mm:ss z', 'Europe/Moscow') }}

Предыдущий пример распечатает текущую дату в московском времени, например сб, 11 апр. 2020 15:27:38 MSK.

calendar#

Эта функция создает новый экземпляр DateTime. Принимает до двух аргументов:

  • (Опционально) Объект даты, временная метка или строка 'now' или не указывается если нужна текущая дата;
  • (Опционально) Часовой пояс даты в формате TZ Database. Если не указан, используется часовой пояс сервера, настроенный в панели управления.
{{ calendar('now', 'Europe/Moscow') }}

Предыдущий пример распечатает текущую дату в московском времени, например сб, 11 апр. 2020 15:27:38 MSK.

Так как функция возвращает экземпляр DateTime, вы можете использовать его функциональность, например:

{% set currentDate = calendar('now', 'Europe/Moscow') %}
{% set fiveHours = currentDate.plusHours(5) %}
{{ currentDate }}
{{ fiveHours }}

Предыдущий пример распечатает две даты с разницей в 5 часов:

сб, 11 апр. 2020 15:27:38 MSK
сб, 11 апр. 2020 20:27:38 MSK

duration#

Эта функция форматирует указанный интервал времени в читаемый формат. Принимает до двух аргументов:

  • Интервал в миллисекундах;
  • (Опционально) Максимальное количество единиц времени. По умолчанию 2.
{{ duration(3650, 2) }}

Предыдущий пример распечатает 3 сек. 650 мс.


Взаимодействия#

reaction#

Эта функция добавит к результирующему сообщению шаблона реакцию с указанной эмоцией. Принимает единственный аргумент с эмоцией в следующих форматах:

  • 🦊 — Unicode-символ эмоции;
  • :fox_face: — название эмоции, включая стандартные и пользовательские на сервере;
  • <a:foxwaggy:695917473874051112> — код пользовательской эмоции.
{% do reaction(':fox_face:') %}

Бонусная возможность

Серверам без бонусов поддержки доступно добавление только одной реакции к сообщению. Поддержавшим нас доступно добавление до пяти реакций на серверах с активным бонусом!

button#

Эта функция добавит к результирующему сообщению шаблона кнопку. Принимает пять строковых аргументов.

  • Первый аргумент — стиль кнопки:
    • LINK — Кнопка-ссылка серого цвета, используется для открытия веб-страниц;
    • PRIMARY — Основная кнопка синего цвета, обычно используется для подтверждения какой-либо операции;
    • SECONDARY — Вторичная кнопка серого цвета, используется как отмена или для редко используемых операций;
    • SUCCESS — Кнопка зелёного цвета, используется для выполнения какой-либо положительной операции;
    • DANGER — Кнопка красного цвета, используется для выполнения какой-либо деструктивной операции;
  • Второй аргумент — URL для кнопки-ссылки, для остальных видов кнопок уникальный идентификатор;
  • Третий аргумент — наименование кнопки;
  • Четвёртый аргумент — эмоция (опциональная, можно указать null);
  • Пятый аргумент — UUID Действия для выполнения (для всех видов кнопок, кроме кнопки-ссылки).
{% do button('LINK', 'https://juniper.bot/', 'Website', '🦊') %}
{% do button('PRIMARY', 'acceptBtn', 'Подтвердить', '✅', 'b39297ea-cc2d-4f88-a475-d4a9df94cb99') %}

Внимание

Кнопки, выполняющие Действия, то есть все стили кнопок, кроме кнопок-ссылок, доступны только в пользовательских командах.


Вернуться наверх