Условия, циклы и ошибки
Управление ходом сценария в Конструкторе модулей Multogram: IF с ветками THEN и ELSE, циклы WHILE, FOR и FOREACH, Break и Continue, Try-Catch и переменная [[_error]], задержка, завершение потока. Как писать условия.
Эти действия — в модуле Логика. Они не делают работу сами, а решают, какие действия выполнятся и сколько раз.
Условие IF
Проверяет условие и выполняет одну из веток: THEN, если оно истинно, ELSE — если нет. Любая ветка может быть пустой.
Как писать условие
| Пример | Истинно, когда |
|---|---|
[[AuthResult]] == true | функция вернула true |
[[count]] >= 10 | счётчик не меньше 10 |
[[status]] != DOWN | статус не равен слову DOWN |
[[name]] == "Иван Петров" | имя совпадает с текстом в кавычках |
[[account]] != "" | в переменной что-то есть |
[[a]] > 0 and [[b]] > 0 | оба числа больше нуля |
[[x]] == 1 or [[y]] == 1 | хотя бы одно равно единице |
not [[done]] | done ложно |
- Сравнения:
==,!=,>,<,>=,<=. Логика:and,or,not— или&&,||,!. - Переменная в условии пишется только как
[[name]], ресурс — как{{name}}. Слово без скобок — это просто слово. - Текст с пробелами и знаками берите в кавычки.
Значение подставляется со своим типом: число сравнивается как число, текст — как текст.
Циклы
| Действие | Когда использовать | Главные параметры |
|---|---|---|
| FOR Loop | Повторить заданное число раз | Начальный и конечный индекс, переменная индекса (cycleIndex) |
| FOREACH Loop | Пройти по каждому элементу списка | Список ([[items]] или {{targets}}), переменная элемента (currentItem) |
| WHILE Loop | Повторять, пока условие истинно | Условие, предел итераций |
Внутри цикла номер шага доступен как [[cycleIndex]], элемент FOREACH — как [[currentItem]] (имена
можно поменять). Break выходит из цикла, Continue переходит к следующему шагу.
Предел итераций WHILE
Чтобы сценарий не завис, у WHILE есть Макс. итераций. Пустое поле — остановка с ошибкой после
10 000 итераций при работе модуля и после 1 000 — в тесте. 0 снимает предел: цикл работает, пока
условие истинно или задачу не остановят.
Обработка ошибок: Try-Catch
Если действие в ветке TRY завершилось ошибкой, остальные действия этой ветки пропускаются и
выполняется ветка CATCH. Текст ошибки в ней — в переменной [[_error]].
TRY: Send Message → Добавить лог «Отправлено»
CATCH: Добавить лог «Не отправлено: [[_error]]»Без Try-Catch ошибка прерывает выполнение потока, пока её не перехватит Try-Catch выше — в этой функции или в той, что её вызвала. Оборачивайте в Try-Catch всё, что зависит от внешнего мира: Telegram, сеть, файлы.
Результат неудачного действия не записывается
Если действие завершилось ошибкой, его переменная результата не получает значения. Не проверяйте её условием после такого действия — обрабатывайте ошибку в ветке CATCH.
Остальные действия логики
| Действие | Что делает |
|---|---|
| Delay | Пауза в миллисекундах: 1000 — одна секунда. Можно [[переменную]] или {{ресурс}} |
| Вызвать функцию · Вернуть | Выполнить другую функцию и вернуть из неё значение |
| Установить переменную · Увеличить переменную | Работа с переменными, в том числе глобальными |
| End Thread | Завершить текущий поток |
| Stop Scenario | Остановить модуль целиком, со всеми потоками |
Паузы между действиями Telegram
Однотипные действия подряд — частая причина FloodWait и спамблока. Ставьте Delay между отправками и выносите задержку в ресурс, чтобы её выбирал пользователь.
Обновлено
Полотно и действия
Как собрать сценарий модуля на полотне Конструктора модулей: добавить действие, настроить параметры, подставить переменные и ресурсы, переставить, скопировать, отключить и найти действие.
Переменные
Переменные [[name]] в Конструкторе модулей Multogram: откуда берутся, типы значений, поля объектов и элементы массивов, локальные и глобальные переменные в многопоточном модуле, просмотр в инспекторе.