umbot
Version:
Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф
134 lines (133 loc) • 10.1 kB
TypeScript
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>[];
}