umbot
    Preparing search index...

    Класс, который берет на себя всю обязанность за регистрацию команд и шагов. Экземпляр не создаётся напрямую — он доступен как ctx.appContext.command в обработчиках и middleware.

    // Динамическая регистрация команды из middleware или обработчика
    ctx.appContext.command.addCommand('dyn', ['динамика'], (cmd, ctrl) => {
    ctrl.text = 'Команда добавлена в рантайме';
    });
    Index

    Constructors

    Properties

    commands: Map<string, ICommandParam<BotController<IUserData, IPlatformData>>> = ...

    Добавленные команды для обработки

    commandsList: [string, ICommandParam<BotController<IUserData, IPlatformData>>][] = []

    Снимок команд для горячего цикла поиска.

    Перебор Map через for...of аллоцирует пару-массив на каждой итерации — при скане тысяч команд это лишний мусор на каждый запрос. Снимок хранится обычным массивом пар и пересобирается лениво: мутации только помечают его флагом, пересборка происходит при первом поиске. Источник правды — commands (Map).

    customCommandResolver: TCommandResolver | undefined

    Кастомизация поиска команд.

    regexpGroup: Map<string, IGroupData> = ...

    Сгруппированные регулярные выражения. Начинает отрабатывать как только было задано более 300 регулярных выражений

    steps: Map<string, IStepParam<BotController<IUserData, IPlatformData>>> = ...

    Добавленные шаги для обработки

    strictMode: boolean = false

    Флаг строгого режима работы приложения. В строгом режиме работы, все ReDoS регулярные выражения не будут добавляться.

    Accessors

    • get events(): ReadonlyMap<
          TEventType,
          (
              (
                  botController: BotController,
              ) => string | false | void | Promise<string | void>
          )[],
      >

      Зарегистрированные событийные обработчики (только чтение).

      Readonly-аксессор над внутренним реестром: Map не пересоздаётся, чтение в горячем пути BotController.#eventResolver остаётся дешёвым. Мутации извне запрещены — только через addEvent/removeEvent/clearEvents.

      Returns ReadonlyMap<
          TEventType,
          (
              (
                  botController: BotController,
              ) => string | false | void | Promise<string | void>
          )[],
      >

    • get hasEvents(): boolean

      Флаг «есть хоть один событийный обработчик» (только чтение).

      Обновляется методами регистрации/очистки; прямое присваивание извне невозможно, поэтому флаг не разъедется с реестром.

      Returns boolean

    Methods

    • Добавляет команду для обработки пользовательских запросов

      ⚙️ Оптимизация: при регистрации более 300 команд с регулярными выражениями фреймворк автоматически объединяет их в группы для повышения производительности.

      Type Parameters

      Parameters

      • commandName: string

        Уникальный идентификатор команды

      • slots: TSlots

        Триггеры для активации команды

        • Если элемент — строка → ищется как подстрока (text.includes(...)).
        • Если элемент — RegExp → проверяется как регулярное выражение (.test(text)).
        • При isPattern = true строковые слоты компилируются в одно объединённое регулярное выражение с флагом ium.
        • При isPattern = false каждый элемент обрабатывается по своему типу:
          • string → как литерал (поиск подстроки),
          • RegExp → как регулярное выражение
        • Если ВСЕ слоты — готовые RegExp, isPattern для строк не применяется (строк нет) и команда трактуется как pattern. Без явного isPattern слоты склеиваются с их собственными (общими) флагами, а не с ium; слоты с разными флагами проверяются по отдельности.
      • cb: (
            userCommand: string,
            botController: TBotController,
        ) => string | void | Promise<string | void>

        Функция-обработчик команды

      • isPattern: boolean = false

        Использовать регулярные выражения (по умолчанию false)

      Returns void

      Простая команда со словами:

      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('Закрыть');
      }
      }
      );

      Поиск команд оптимизирован:

      1. Сначала проверяется точное совпадение
      2. Если точного совпадения нет — выполняется последовательный перебор

      При регистрации более 300 команд с регулярными выражениями фреймворк автоматически объединяет их в группы для повышения производительности.

      При isPattern=true используются регулярные выражения JavaScript В callback доступен весь функционал BotController Можно использовать async функции в callback

    • Регистрирует обработчик универсального события платформы.

      Обработчики событий вызываются до поиска шагов и команд. На одно событие можно зарегистрировать несколько обработчиков: они опрашиваются в порядке регистрации, пока один не вернёт строку-ответ (цепочка останавливается). Обработчик с false передаёт событие следующему обработчику; когда все отказались — запрос уходит в обычный конвейер (шаг → команда → интент → fallback).

      Type Parameters

      Parameters

      • eventType: TEventType

        Универсальный тип события ('photo', 'callback', …)

      • cb: (
            botController: TBotController,
        ) => string | false | void | Promise<string | void>

        Функция-обработчик; может вернуть строку (текст ответа) или false (событие «не мой» — обработка продолжится по обычному конвейеру)

      Returns this

    • Регистрирует обработчик для именованного шага диалога.

      Шаг — это часть многошагового сценария (например: "регистрация", "оформление заказа"). После вызова ctx.thisIntentName = 'myStep' в команде или другом шаге, следующее сообщение пользователя будет обработано этим обработчиком.

      💡 Обработчик получает полный BotController, как и в командах: доступны this.text, this.userData, this.buttons, this.thisIntentName и т.д.

      Type Parameters

      Parameters

      • stepName: string

        — Уникальное имя шага (например, 'enter_email').

      • handler: (botController: TBotController) => false | void | Promise<false | void>

        — Функция, вызываемая при получении сообщения в этом шаге.

      Returns this

      Текущий экземпляр CommandReg.

      bot.addStep('confirm_age', (ctx) => {
      if (ctx.userCommand === 'да') {
      ctx.text = 'Отлично! Добро пожаловать.';
      ctx.thisIntentName = null; // завершаем сценарий
      } else {
      ctx.text = 'Извините, вход запрещён.';
      ctx.thisIntentName = 'goodbye'; // переходим к другому шагу
      }
      });
    • Удаляет все зарегистрированные команды

      Returns void

    • Удаляет все зарегистрированные событийные обработчики.

      Returns this

      Текущий экземпляр CommandReg

    • Удаляет все зарегистрированные шаги.

      ⚠️ Это глобальная операция: все сценарии станут недоступны. Используйте с осторожностью (например, при перезагрузке логики приложения).

      Returns this

      Текущий экземпляр CommandReg.

    • Возвращает конструктор RegExp (например, re2), заданный плагином regExp, для компиляции регулярных выражений. Если плагин не подключён — undefined.

      Returns RegExpConstructor | undefined

    • Поиск команды по точному совпадению (без RegExp).

      Parameters

      • userCommand: string

        Команда пользователя (в нижнем регистре)

      Returns string | undefined

      Имя найденной команды или undefined

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

      Если выражение признано небезопасным:

      • В обычном режиме пишется сообщение (ошибка без re2, предупреждение с ним), и выражение используется как есть.
      • В strictMode — пишется ошибка, и небезопасные слоты отбрасываются (status: false; для одиночного RegExp возвращаются пустые слоты, для массива — только безопасные слоты).

      Parameters

      • slots: RegExp | TSlots

        Слот(ы) или регулярное выражение для проверки.

      Returns IDangerRegex

      Исходные слоты (в обычном режиме) или безопасные слоты с флагом ошибки.

    • Удаляет команду

      Parameters

      • commandName: string

        Имя команды

      Returns void

    • Удаляет все обработчики указанного события.

      Parameters

      Returns this

      Текущий экземпляр CommandReg

    • Удаляет зарегистрированный шаг по имени.

      После удаления шаг больше не будет обрабатываться, даже если активен у пользователя. (Рекомендуется завершать активные сценарии через ctx.thisIntentName = null перед удалением.)

      Parameters

      • stepName: string

        — Имя шага для удаления.

      Returns this

      Текущий экземпляр CommandReg.