umbot
    Preparing search index...

    Class AppContext<TDbInfo, TQuery>

    Внутренний класс для хранения состояния и конфигурации приложения. Используется внутри Bot для хранения состояния и конфигурации

    Разработчикам обычно НЕ нужно создавать экземпляры этого класса напрямую. Вместо этого используйте методы класса Bot:

    • bot.getAppContext() - получить доступ к контексту
    • bot.setAppConfig() - настроить конфигурацию
    • bot.setPlatformParams() - настроить параметры платформ

    Этот класс содержит:

    • Конфигурацию приложения (IAppConfig)
    • Параметры платформ (IAppParam)
    • Регистрацию команд и интентов
    • Логирование и метрики
    • Подключение к БД
    // AppContext создаётся самим Bot:
    const bot = new Bot();
    const appContext = bot.getAppContext(); // если нужен прямой доступ

    Type Parameters

    Index

    Constructors

    Properties

    appConfig: Required<Omit<IAppConfig, "memorySession">> & Pick<
        IAppConfig,
        "memorySession",
    > = ...

    Конфигурация приложения

    appMode: TAppMode = 'dev'

    Определяет режим работы приложения

    command: CommandReg = ...

    Менеджер регистрации команд, шагов и событий (CommandReg). Сами команды — через геттер command.commands, шаги — command.steps.

    database: {
        adapter?: IDatabaseAdapter;
        databaseInfo?: TDbInfo;
        isSendConnect?: boolean;
    } = {}

    Информация по подключению к базе данных.

    Type Declaration

    • Optionaladapter?: IDatabaseAdapter

      Адаптер для работы с базой данных

    • OptionaldatabaseInfo?: TDbInfo

      Данные, необходимые адаптеру для работы

    • OptionalisSendConnect?: boolean

      Флаг, определяющий, успешно ли подключился метод connect адаптера базы данных

    httpClient: THttpClient = global.fetch

    Кастомный HTTP-клиент для выполнения всех исходящих запросов фреймворка. По умолчанию используется глобальный fetch. Вы можете заменить его на любой совместимый клиент (например, axios, undici, got), реализующий интерфейс:

    (input: RequestInfo, init?: RequestInit) => Promise<Response>
    

    Это позволяет:

    • добавлять retry-логику, таймауты, circuit breaker;
    • внедрять tracing, метрики или логирование всех запросов;
    • мокать сетевые вызовы в тестах;
    • использовать альтернативные HTTP-библиотеки.
    const bot = new Bot();
    const ctx = bot.getAppContext();
    ctx.httpClient = async (url, options) => {
    // добавляем таймаут 5 сек
    const controller = new AbortController();
    const id = setTimeout(() => controller.abort(), 5000);
    try {
    const res = await fetch(url, { ...options, signal: controller.signal });
    clearTimeout(id);
    return res;
    } catch (e) {
    clearTimeout(id);
    throw e;
    }
    };
    platformParams: IAppParam = ...

    Параметры приложения

    platforms: IPlatform<TQuery> = {}

    Список подключенных платформ

    plugins: TAppPlugin = {}

    Список подключенных плагинов

    Accessors

    • get regexpGroup(): Map<string, IGroupData>

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

      Returns Map<string, IGroupData>

    • get usedMetric(): boolean

      Возвращает флаг, который говорит о том, нужно ли собирать метрики

      Returns boolean

      true, если заданный логгер реализует метод metric

      if (ctx.usedMetric) {
      ctx.logMetric('GET_COMMAND', 0.42, { platform: 'alisa' });
      }

    Methods

    • Закрывает все подключения, для корректного завершения работы приложения

      Returns Promise<void>

      Завершается, когда все подключения закрыты и логи сохранены

      await bot.getAppContext().close(); // при завершении работы приложения
      
    • Логирование информации

      ⚠️ Секреты не маскируются. В отличие от logError / logWarn / logMetric, этот метод НЕ прогоняет аргументы через конвейер маскирования — они уходят в логгер как есть. Предназначен для операционных сообщений (статус сервера, метрики старта). Никогда не передавайте сюда токены, пароли и другие секреты; для диагностики с метаданными используйте logWarn/logError.

      Parameters

      • ...args: unknown[]

        Аргументы для логирования

      Returns void

      ctx.log('Запрос обработан за', 42, 'мс');
      ctx.log({ userId: '123', command: 'start' });
    • Логирование ошибки

      Parameters

      • str: string

        Текст ошибки

      • Optionalmeta: Record<string, unknown>

        Дополнительные метаданные

      Returns void

      ctx.logError('Ошибка подключения к БД', { host: 'localhost', error: err.message });
      
    • Логирование метрики

      Имя метрики и label проходят тот же конвейер маскирования секретов, что и logError/logWarn: в label может попасть, например, полный URL запроса, а для Telegram он содержит токен бота (https://api.telegram.org/bot<ТОКЕН>/...), который не должен попасть в системы наблюдаемости.

      Parameters

      • name: string

        имя метрики

      • value: unknown

        значение

      • label: Record<string, unknown>

        Дополнительные метаданные

      Returns void

      ctx.logMetric('GET_COMMAND', 0.42, { platform: 'alisa', command: 'weather' });
      ctx.logMetric('DB_SELECT', 12.5, { table: 'UsersData' });
    • Логирование предупреждения

      Parameters

      • str: string

        Текст предупреждения

      • Optionalmeta: Record<string, unknown>

        Дополнительные метаданные

      Returns void

      ctx.logWarn('Текст обрезан до 1024 символов', { original: longText, truncated: shortText });
      
    • Сохраняет данные в JSON файл

      Parameters

      • fileName: string

        Имя файла

      • data: unknown

        Данные для сохранения

      Returns Promise<boolean>

      Promise — true в случае успешного сохранения

      const saved = await ctx.saveFileData('config.json', { key: 'value' });
      if (saved) console.log('Данные сохранены');
    • Устанавливает конфигурацию приложения

      Parameters

      • config: Partial<IAppConfig>

        Пользовательская конфигурация

      Returns void

      ctx.setAppConfig({ error_log: './logs', json: './data' });
      
    • Позволяет установить свою реализацию для логирования

      Parameters

      • logger: ILogger | null

        Экземпляр логгера или null для отключения

      Returns void

      ctx.setLogger({ error: (msg, meta) => console.error(msg, meta) });
      
    • Устанавливает параметры приложения

      Parameters

      • params: IAppParam

        Пользовательские параметры

      Returns void

      ctx.setPlatformParams({ welcome_text: 'Привет!', help_text: 'Список команд…' });