UNPKG

umbot

Version:

Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф

134 lines (133 loc) 10.1 kB
import { AppContext, TAppType } from './core'; /** * Дополнительные опции для предзагрузчика */ export interface IOptions { /** * Пользователь Telegram, которому будет отправлено изображение для получения токена */ telegramUseId?: string | number; } /** * Класс, предназначенный для предварительной загрузки медиаресурсов (изображений, звуков) для различных платформ. * * Этот класс позволяет загрузить файлы на серверы платформ и закэшировать их токены *до* начала обработки * пользовательских запросов, что помогает сократить время обработки пользовательского запроса при * первичной отправке медиафайлов в ответе. * * @example * // В точке входа приложения (например, index.ts) * import { Preload } from 'umbot/preload'; * * // Предположим, appContext уже инициализирован * const preload = new Preload(appContext); * * // Загрузить изображения для Алисы и ВК * const imagePromises = preload.loadImages(['/path/to/img1.jpg', '/path/to/img2.png'], [T_ALISA, T_VK]); * // Загрузить звуки только для Маруси * const soundPromises = preload.loadSounds(['/path/to/sound1.mp3'], [T_MARUSIA]); * * // Запустить загрузку (все промисы выполняются параллельно) * try { * await Promise.all(imagePromises); * console.log('Изображения предзагружены'); * await Promise.all(soundPromises); * console.log('Звуки предзагружены'); * } catch (error) { * console.error('Ошибка при предзагрузке:', error); * } * * // Теперь приложение готово к работе, и первые вызовы с медиа будут быстрыми * bot.start('localhost', 3000); */ export declare class Preload { private _appContext; private readonly _controller; /** * Создает экземпляр класса Preload. * * @param {AppContext} [appContext] - Контекст приложения, необходимый для доступа к БД и конфигурации. * Может быть установлен позже через `setAppContext`. */ constructor(appContext?: AppContext); /** * Устанавливает контекст приложения. * * @param {AppContext} [appContext] - Контекст приложения. */ setAppContext(appContext?: AppContext): void; /** * Возвращает список платформ, для которых в конфигурации `AppContext` указаны токены. * Если передан массив `platforms`, результат фильтруется по этому списку. * * @param {TAppType[]} [platforms] - Массив типов платформ для фильтрации. * @returns {TAppType[]} Массив доступных платформ. */ protected _getPlatforms(platforms?: TAppType[]): TAppType[]; /** * Возвращает внутренний тип изображения, используемый в `ImageTokens`, для указанной платформы. * * @param {TAppType} platform - Тип платформы. * @returns {number | undefined} Тип изображения для `ImageTokens` или `undefined`, если платформа не поддерживается * или не требует предзагрузки (например, Telegram). */ protected _getImageType(platform: TAppType): string | undefined; /** * Возвращает внутренний тип звука, используемый в `SoundTokens`, для указанной платформы. * * @param {TAppType} platform - Тип платформы. * @returns {number | undefined} Тип звука для `SoundTokens` или `undefined`, если платформа не поддерживается * или не требует предзагрузки (например, Telegram). */ protected _getSoundType(platform: TAppType): string | undefined; /** * Подготавливает промисы для удаления изображений с серверов платформ и из базы данных. * * Этот метод *не запускает* выполнение промисов. Для выполнения удаления необходимо * использовать `Promise.all()` или `Promise.allSettled()` с возвращаемым массивом. * * @param {string[]} images - Массив путей к файлам изображений для удаления. * @param {TAppType[]} [platforms] - Массив типов платформ для фильтрации. Если не указан, обрабатываются все доступные. * @returns {Promise<boolean>[]} Массив промисов, каждый из которых разрешается `true` при успешном удалении * или `false` при ошибке. */ removeImages(images: string[], platforms?: TAppType[]): Promise<boolean>[]; /** * Подготавливает промисы для удаления звуков с серверов платформ и из базы данных. * * Этот метод *не запускает* выполнение промисов. Для выполнения удаления необходимо * использовать `Promise.all()` или `Promise.allSettled()` с возвращаемым массивом. * * @param {string[]} sounds - Массив путей к файлам звуков для удаления. * @param {TAppType[]} [platforms] - Массив типов платформ для фильтрации. Если не указан, обрабатываются все доступные. * @returns {Promise<boolean>[]} Массив промисов, каждый из которых разрешается `true` при успешном удалении * или `false` при ошибке. */ removeSounds(sounds: string[], platforms?: TAppType[]): Promise<boolean>[]; /** * Подготавливает промисы для загрузки и кэширования изображений для указанных платформ. * * Этот метод *не запускает* выполнение промисов. Для выполнения загрузки необходимо * использовать `Promise.all()` или `Promise.allSettled()` с возвращаемым массивом. * * @param {string[]} images - Массив путей к файлам изображений для загрузки. * @param {TAppType[]} [platforms] - Массив типов платформ для фильтрации. Если не указан, обрабатываются все доступные. * @param opts - Дополнительные опции для загрузки. Так как в Telegram не получить токен без отправки файла пользователю, можно отправить файл произвольному пользователю, который будет передан в свойстве. * @returns {Promise<(string | null)[]>[]} Массив промисов, каждый из которых разрешается токеном изображения * или `null` в случае ошибки или если платформа не поддерживается. */ loadImages(images: string[], platforms?: TAppType[], opts?: IOptions): Promise<string | null>[]; /** * Подготавливает промисы для загрузки и кэширования звуков для указанных платформ. * * Этот метод *не запускает* выполнение промисов. Для выполнения загрузки необходимо * использовать `Promise.all()` или `Promise.allSettled()` с возвращаемым массивом. * * @param {string[]} sounds - Массив путей к файлам звуков для загрузки. * @param {TAppType[]} [platforms] - Массив типов платформ для фильтрации. Если не указан, обрабатываются все доступные. * @param opts - Дополнительные опции для загрузки. Так как в телеграм не получить токен без отправки файла пользователю, можно отправить файл произвольному пользователю, который будет передан в свойстве. * @returns {Promise<(string | null)[]>[]} Массив промисов, каждый из которых разрешается токеном звука * или `null` в случае ошибки или если платформа не поддерживается. */ loadSounds(sounds: string[], platforms?: TAppType[], opts?: IOptions): Promise<string | null>[]; }