Перейти к содержанию

Runtime скриптов

Для того чтобы корректно и эффективно использовать скрипты, нужно знать особенности скриптового движка ELMA Bot.

TypeScript

В ELMA Bot используется обычный компилятор TypeScript. При написании скриптов можно использовать любые синтаксические возможности языка, классы, функции, типизацию и т. д. Со стороны синтаксиса ограничения есть только на импорт библиотек.

async/await

Синтаксис “async/await” поддерживаются в TypeScript, но в скриптах ELMA Bot дополнительно можно использовать оператор await на верхнем уровне скрипта. При этом скрипт будет дожидаться выполнения выражения справа от await.

Node.js среда

Скриптовый движок ELMA Bot использует внутри Node.js, поэтому функции из browser runtime (HTML DOM Api) могут быть недоступны. Например, если вам нужно конвертировать файл в base64, то следует использовать Buffer.from а не btoa. При поиске решения вашей задачи в интернете рекомендуется формировать запросы как “TypeScript Node.js base64”, а не “JavaScript base64”.

Изоляция скрипта

Скрипт запускается в изолированной среде, в отдельном процессе со своей областью памяти.

Значения переменных бота, которые передаются в скрипт, являются копиями. Код скрипта записывает новые значения в context.output.variables, а после завершения скрипта новые значения попадают в память бота.

Каждый запуск скрипта изолирован от других скриптов. Это значит, что все переменные скрипта инициализируются каждый раз, и их значения не сохраняются между запусками.

Файловая система

Доступ к файловой системе запрещен, нельзя записывать и читать файлы, директории и т. д. Нет функций fs.

Доступные модули

Среда выполнения предоставляет ограниченный набор модулей:

  • axios — библиотека для HTTP запросов.

  • fuse.js — нечеткий поиск.