Цепочки действий
Тег run передает управление другому действию той же команды. Так одна команда может выбирать, что делать, в зависимости от аргументов, прав или сохраненных данных.
Как это работает
template
{% run 'ae04dfed-e19c-49d3-84fc-b05cec59976e' %}runзавершает текущее действие: все, что написано в шаблоне после выполненногоrun, уже не выполнится, а текст этого действия не отправится.- Затем запускается действие с указанным UUID. У него те же
member,message,argumentsиtopic. - UUID берется из меню «⋯» нужного действия.
Передача данных
Добавьте with и карту значений — они попадут в parameters запускаемого действия:
template
{% run 'ae04dfed-e19c-49d3-84fc-b05cec59976e' with { page: 0, sort: 'trophies' } %}В запущенном действии:
template
{{ parameters.page }} {# 0 #}
{{ parameters.sort }} {# trophies #}Еще один способ передать данные — глобальные переменные: {% global total = 100 %} в одном действии видна во всех следующих действиях цепочки.
Запуск самого себя
{% run 'self' %} перезапускает текущее действие. Это пригодится редко — чаще 'self' используют в кнопках для листания страниц.
Пример: подкоманды
Команда !монеты с подкомандами баланс, перевод и топ. Действие по умолчанию — «Развилка» типа «Выполнение кода»:
template
{% set sub = arguments.get(1) | lower %}
{% if sub == 'перевод' %}
{% run '1f4e7a90-2b3c-4d5e-8f60-718293a4b5c6' %}
{% elseif sub == 'топ' %}
{% run '2a5b8c01-3d4e-4f60-9a71-8293a4b5c6d7' %}
{% else %}
{% run '3b6c9d12-4e5f-4061-8b72-93a4b5c6d7e8' %}
{% endif %}!монеты перевод @anna 50 запустит «Перевод», !монеты топ — «Топ», а все остальное — «Баланс».
Ограничения
| Правило | Почему |
|---|---|
run работает только в действиях пользовательских команд | В приветствиях и других местах нет действий |
| Запускать можно только действия этой же команды | UUID чужой команды — ошибка run_target_not_found |
| Не больше 3 переходов подряд | Защита от бесконечных цепочек. Четвертый переход — ошибка run_depth_exceeded |
| Квоты общие на всю цепочку | Лимиты шагов, хранилищ, astral и отправок считаются вместе для всех действий цепочки — см. Квоты |