--- url: /commands/actions/code.md description: >- Действие «Выполнение кода» — выполнить шаблон без обычного ответа, сохранить данные или выбрать следующее действие через run. --- # Выполнение кода
Действие только выполняет шаблон. Его используют, когда нужно что-то сделать, а не написать: сохранить данные, выдать роль по условию или решить, какое действие запустить дальше.
## Как отвечает бот { #reply } * Если шаблон сам ничего не отправил, бот ответит коротким «Готово». * Если шаблон отправил сообщение через `chat.sendMessage(…)` или `createMessage().send()`, «Готово» не будет. * Если сработал `{% require %}` или `{% return 'текст' %}`, бот ответит этим текстом как сообщением об ошибке — ответом, эфемерно или молча, в зависимости от [настройки ошибок](../settings#error-mode). Текст, написанный в шаблоне вне островков, в чат не попадает — у этого действия нет своего сообщения. ## Пример: ежедневная награда { #daily } Команда `!бонус` раз в сутки начисляет 100 монет. Монеты хранятся в [атрибуте](/templates/storage/attributes) участника. ```template {% 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) %} ``` Построчно: 1. Берем атрибут с моментом прошлого бонуса — он хранится числом миллисекунд. 2. `require` проверяет, что с прошлого бонуса прошли сутки (86 400 000 мс). Если нет — бот останавливается и отвечает текстом после `returning`. 3. Прибавляем 100 монет: `increment` возвращает новое значение. 4. Запоминаем текущий момент. 5. Отправляем сообщение в чат. Раз шаблон сам что-то отправил, «Готово» бот уже не пишет.