Выполнение кода
Действие только выполняет шаблон. Его используют, когда нужно что-то сделать, а не написать: сохранить данные, выдать роль по условию или решить, какое действие запустить дальше.
Как отвечает бот
- Если шаблон сам ничего не отправил, бот ответит коротким «Готово».
- Если шаблон отправил сообщение через
chat.sendMessage(…)илиcreateMessage().send(), «Готово» не будет. - Если сработал
{% require %}или{% return 'текст' %}, бот ответит этим текстом как сообщением об ошибке — ответом, эфемерно или молча, в зависимости от настройки ошибок.
Текст, написанный в шаблоне вне островков, в чат не попадает — у этого действия нет своего сообщения.
Пример: ежедневная награда
Команда !бонус раз в сутки начисляет 100 монет. Монеты хранятся в атрибуте участника.
{% set last = member.getAttribute('bonus_at') %}
{% require now().millis - (last.value ?: 0) >= 86400000 returning 'Бонус уже получен. Приходи завтра!' %}
{% set coins = member.getAttribute('coins').increment(100) %}
{% do last.update(now().millis) %}
{% do chat.sendMessage('💰 ' ~ member.name ~ ', +100 монет! Теперь у тебя ' ~ coins) %}Построчно:
- Берем атрибут с моментом прошлого бонуса — он хранится числом миллисекунд.
requireпроверяет, что с прошлого бонуса прошли сутки (86 400 000 мс). Если нет — бот останавливается и отвечает текстом послеreturning.- Прибавляем 100 монет:
incrementвозвращает новое значение. - Запоминаем текущий момент.
- Отправляем сообщение в чат. Раз шаблон сам что-то отправил, «Готово» бот уже не пишет.
💰 Анна, +100 монет! Теперь у тебя 1350
Почему не просто текст
В действии «Выполнение кода» нет своего сообщения, поэтому ответ отправляется функцией chat.sendMessage. Если нужен ответ с разметкой, кнопками и настройками «куда отправить», сделайте это действие типа «Отправка сообщения» — логика будет той же.
Пример: развилка по аргументу
Команда !клуб с тремя действиями: «Развилка» (по умолчанию, тип «Выполнение кода»), «Состав» и «Статистика» (оба — «Отправка сообщения»). Развилка смотрит на первое слово и передает управление нужному действию:
{% set sub = arguments.get(1) | lower %}
{% if sub == 'состав' %}
{% run '0b7d4a52-6c1e-4f3a-9e28-5d9c3b7a1f60' %}
{% elseif sub == 'стата' %}
{% run '8e2f6c19-3a7d-4b58-a1c4-7f9e0d2b6c35' %}
{% endif %}
{% return 'Используй: !клуб состав или !клуб стата' %}run завершает текущее действие, поэтому строка с return выполнится, только если ни одно условие не подошло. Подробнее — в статье Цепочки действий.