Конструктор класса CommandReg.
Логгер для вывода предупреждений и ошибок
Плагины приложения (для получения кастомного RegExp)
Добавленные команды для обработки
Снимок команд для горячего цикла поиска.
Перебор Map через for...of аллоцирует пару-массив на каждой итерации —
при скане тысяч команд это лишний мусор на каждый запрос. Снимок хранится
обычным массивом пар и пересобирается лениво: мутации только помечают
его флагом, пересборка происходит при первом поиске. Источник правды —
commands (Map).
Кастомизация поиска команд.
Сгруппированные регулярные выражения. Начинает отрабатывать как только было задано более 300 регулярных выражений
Добавленные шаги для обработки
Флаг строгого режима работы приложения. В строгом режиме работы, все ReDoS регулярные выражения не будут добавляться.
Зарегистрированные событийные обработчики (только чтение).
Readonly-аксессор над внутренним реестром: Map не пересоздаётся, чтение
в горячем пути BotController.#eventResolver остаётся дешёвым. Мутации
извне запрещены — только через addEvent/removeEvent/clearEvents.
Флаг «есть хоть один событийный обработчик» (только чтение).
Обновляется методами регистрации/очистки; прямое присваивание извне невозможно, поэтому флаг не разъедется с реестром.
Добавляет команду для обработки пользовательских запросов
⚙️ Оптимизация: при регистрации более 300 команд с регулярными выражениями фреймворк автоматически объединяет их в группы для повышения производительности.
Уникальный идентификатор команды
Триггеры для активации команды
text.includes(...))..test(text)).isPattern = true строковые слоты компилируются в одно объединённое
регулярное выражение с флагом ium.isPattern = false каждый элемент обрабатывается по своему типу:
ium;
слоты с разными флагами проверяются по отдельности.Функция-обработчик команды
Использовать регулярные выражения (по умолчанию false)
Простая команда со словами:
commandReg.addCommand(
'greeting',
['привет', 'здравствуй'],
(cmd, ctrl) => {
if (ctrl) ctrl.text = 'Здравствуйте!';
}
);
Команда с регулярными выражениями:
// Обработка чисел от 1 до 999
commandReg.addCommand(
'number',
['\\b([1-9]|[1-9][0-9]|[1-9][0-9][0-9])\\b'],
(cmd, ctrl) => {
if (ctrl) ctrl.text = `Вы ввели число: ${cmd}`;
},
true // включаем поддержку регулярных выражений
);
Команда с доступом к состоянию:
commandReg.addCommand(
'stats',
['статистика'],
async (cmd, ctrl) => {
if (ctrl) {
// Доступ к пользовательским данным
const visits = ctrl.userData?.visits || 0;
ctrl.text = `Вы использовали приложение ${visits} раз`;
// Доступ к кнопкам и другим UI элементам
ctrl.buttons
.addBtn('Сбросить статистику')
.addBtn('Закрыть');
}
}
);
Поиск команд оптимизирован:
При регистрации более 300 команд с регулярными выражениями фреймворк автоматически объединяет их в группы для повышения производительности.
При isPattern=true используются регулярные выражения JavaScript В callback доступен весь функционал BotController Можно использовать async функции в callback
Регистрирует обработчик универсального события платформы.
Обработчики событий вызываются до поиска шагов и команд. На одно событие
можно зарегистрировать несколько обработчиков: они опрашиваются в порядке
регистрации, пока один не вернёт строку-ответ (цепочка останавливается).
Обработчик с false передаёт событие следующему обработчику; когда все
отказались — запрос уходит в обычный конвейер (шаг → команда → интент →
fallback).
Универсальный тип события ('photo', 'callback', …)
Функция-обработчик; может вернуть строку (текст ответа) или
false (событие «не мой» — обработка продолжится по обычному конвейеру)
Регистрирует обработчик для именованного шага диалога.
Шаг — это часть многошагового сценария (например: "регистрация", "оформление заказа").
После вызова ctx.thisIntentName = 'myStep' в команде или другом шаге,
следующее сообщение пользователя будет обработано этим обработчиком.
💡 Обработчик получает полный
BotController, как и в командах: доступныthis.text,this.userData,this.buttons,this.thisIntentNameи т.д.
— Уникальное имя шага (например, 'enter_email').
— Функция, вызываемая при получении сообщения в этом шаге.
Текущий экземпляр CommandReg.
Удаляет все зарегистрированные команды
Удаляет все зарегистрированные событийные обработчики.
Текущий экземпляр CommandReg
Удаляет все зарегистрированные шаги.
⚠️ Это глобальная операция: все сценарии станут недоступны. Используйте с осторожностью (например, при перезагрузке логики приложения).
Текущий экземпляр CommandReg.
Возвращает актуальный снимок команд, пересобирая его при необходимости. Вызывается из горячего цикла поиска команд: при неизменном наборе команд (обычный прод-режим) стоимость — одна проверка булевого флага.
Возвращает конструктор RegExp (например, re2), заданный плагином regExp, для компиляции регулярных выражений. Если плагин не подключён — undefined.
Поиск команды по точному совпадению (без RegExp).
Команда пользователя (в нижнем регистре)
Имя найденной команды или undefined
Проверяет, что переданное регулярное выражение не содержит уязвимых к ReDoS конструкций.
Если выражение признано небезопасным:
re2, предупреждение с ним),
и выражение используется как есть.strictMode — пишется ошибка, и небезопасные слоты отбрасываются
(status: false; для одиночного RegExp возвращаются пустые слоты,
для массива — только безопасные слоты).Слот(ы) или регулярное выражение для проверки.
Исходные слоты (в обычном режиме) или безопасные слоты с флагом ошибки.
Удаляет команду
Имя команды
Удаляет все обработчики указанного события.
Тип события
Текущий экземпляр CommandReg
Удаляет зарегистрированный шаг по имени.
После удаления шаг больше не будет обрабатываться, даже если активен у пользователя.
(Рекомендуется завершать активные сценарии через ctx.thisIntentName = null перед удалением.)
— Имя шага для удаления.
Текущий экземпляр CommandReg.
Устанавливает режим группировки регулярных выражений.
Режим группировки: 'auto', 'group' или 'no-group'
Класс, который берет на себя всю обязанность за регистрацию команд и шагов. Экземпляр не создаётся напрямую — он доступен как
ctx.appContext.commandв обработчиках и middleware.Example