umbot
Version:
Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф
87 lines (86 loc) • 3.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getImageInDB = getImageInDB;
exports.cardProcessing = cardProcessing;
const index_1 = require("../../../index");
const API_1 = require("../API");
const utils_1 = require("../Base/utils");
const constants_1 = require("./constants");
/**
* Получение токена, необходимого для отображения картинок в карточке Телеграм
* @param controller Контроллер приложения
* @param path Путь до картинки
* @param caption Заголовок для картинки
*/
async function getImageInDB(controller, path, caption) {
let isCbCalled = false;
const result = await (0, utils_1.getImageToken)(path, constants_1.T_TELEGRAM, controller, async (model) => {
const api = new API_1.TelegramRequest(controller.appContext);
const photo = await api.sendPhoto(controller.userId, path, caption || undefined);
isCbCalled = true;
if (photo?.ok && photo.result?.photo?.file_id) {
model.imageToken = photo.result.photo.file_id;
if (await model.save(true)) {
return model.imageToken;
}
}
return null;
});
if (!isCbCalled && result) {
await new API_1.TelegramRequest(controller.appContext).sendPhoto(controller.userId, result, caption || undefined);
}
return result;
}
/**
* Получает карточку для отображения в Telegram.
* @param cardInfo Информация о карточке
* @param controller Контроллер приложения
* @returns {Promise<ITelegramMedia[]>} Карточка или null
*/
async function cardProcessing(cardInfo, controller) {
let object = null;
if (cardInfo.showOne || cardInfo.images.length === 1) {
const image = cardInfo.images[0];
try {
if (!image.imageToken) {
if (image.imageDir) {
image.imageToken = await getImageInDB(controller, image.imageDir, index_1.Text.resize(image.desc, 1024));
}
}
else {
await new API_1.TelegramRequest(controller.appContext).sendPhoto(controller.userId, image.imageToken, index_1.Text.resize(image.desc, 1024));
}
}
catch (e) {
// Логируем ошибку, но не прерываем цикл
controller.appContext.logError(`Telegram.cardProcessing(): Произошла ошибка при загрузке изображения для Telegram`, {
error: e,
});
}
return object;
}
else {
object = [];
for (let i = 0; i < cardInfo.images.length; i++) {
const image = cardInfo.images[i];
let field;
if (!image.imageToken) {
if (image.imageDir) {
field = `attach://${image.imageDir}`;
}
else {
continue;
}
}
else {
field = image.imageToken;
}
object.push({
type: 'photo',
media: field,
caption: index_1.Text.resize(image.desc, 200),
});
}
}
return object;
}