--- url: /templates/advanced/limits.md description: >- Квоты выполнения шаблонов — шаги, время, циклы, хранилища, astral, отправки, роли, кнопки и размер сообщений. --- # Квоты и ограничения
Чтобы один шаблон не мог замедлить бота для всех, у каждого выполнения есть квоты: сколько шагов сделать, сколько раз обратиться к хранилищам, сколько сообщений отправить. Обычные шаблоны до квот даже не приближаются.
## Квоты одного выполнения { #quotas } | Ресурс | Лимит | |---|---| | Шаги движка | 50 000 | | Время работы | 50 мс | | Шаги всех циклов вместе | 5 000 | | Вложенность циклов | 3 | | Вложенность вызовов макросов | 16 | | Длина любой строки | 16 КБ | | Элементов в списке, пар в карте | 250 | | Переходов `run` в цепочке | 3 | | Вставок `include` | 5, каждый шаблон один раз | | [Атрибуты](../storage/attributes) | 5 разных ключей | | [Индексы](../storage/indexes) | 2 индекса, 2 записи, 1 страница до 25 записей | | Обращения к [astral](../astral) | 5 | | Отправка сообщений из шаблона | 3 | | Изменения ролей бота | 10 | | Участники через `chat.getMember` | 5 | | Реакции | 1 на сообщение | | Кнопки | 25 под сообщением, 1–8 в ряду внутри текста | ::: info Цепочка — одно выполнение Если действие запускает другое через `run`, квоты не обнуляются: все действия цепочки тратят общий запас. ::: ## Размер шаблона и сообщения { #size } | Что | Лимит | |---|---| | Длина шаблона | 16 КБ | | Итоговое rich-сообщение | 32 768 символов, 500 блоков, вложенность 16, 50 медиа, 20 столбцов в таблице | | Итоговое сообщение в режиме Text | 4096 символов, подпись к медиа — 1024 | ## Частота команд { #rate } | Что | Лимит | |---|---| | Выполнений пользовательских команд | 30 в минуту на чат, 5 в минуту на участника | | Нажатий кнопок | 20 за 10 секунд на участника | ## Хранилища { #storage } | Что | Лимит | |---|---| | Ключей атрибутов в чате | 10 000 | | Размер значения атрибута | 4 КБ | | Индексов в чате | 50 | | Записей в одном индексе | 100 000 | | Длина ключа записи индекса | 255 символов | | Длина метаданных записи | 500 символов | | Время жизни параметров | 15 минут с последнего обращения | | Время жизни кнопок | 180 дней с последнего нажатия | ## Объекты в панели { #panel } | Что | Лимит | |---|---| | Пользовательских команд в чате | 100 | | Действий в команде | 10 | | Общих шаблонов в чате | 50 | ## Что будет при превышении { #exceeded } Выполнение останавливается, участник получает короткое понятное сообщение, а подробности попадают во вкладку [«Диагностика»](/commands/testing#diagnostics). Коды ошибок квот начинаются с `quota_`: `quota_steps`, `quota_loops`, `quota_storage` и другие — см. [Ошибки](./errors#runtime). ::: tip Как уложиться в квоты * Не читайте в цикле атрибуты разных участников — для топов используйте [индексы](../storage/indexes). * Сохраняйте результат `astral.club(…)` в переменную через `set` и используйте ее, а не вызывайте функцию повторно. * Для больших списков используйте `slice`, чтобы обработать только нужную часть. :::