umbot
Version:
Мультиплатформенный фреймворк для создания голосовых навыков и чат-ботов с единой бизнес-логикой. Встроенная поддержка ВКонтакте, Telegram, Viber, MAX, Яндекс Алисы, Маруси и Сбера SmartApp. Архитектура на адаптерах позволяет подключать любые другие платф
122 lines (121 loc) • 3.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.VK_TYPE_APPS = exports.VK_TYPE_PAY = exports.VK_TYPE_LOCATION = exports.VK_TYPE_LINK = exports.VK_TYPE_TEXT = exports.VK_COLOR_POSITIVE = exports.VK_COLOR_NEGATIVE = exports.VK_COLOR_SECONDARY = exports.VK_COLOR_PRIMARY = exports.GROUP_NAME = void 0;
exports.buttonProcessing = buttonProcessing;
const index_1 = require("../../../index");
const utils_1 = require("../Base/utils");
/**
* Поле для группировки
*/
exports.GROUP_NAME = '_group';
/**
* Цвет кнопки primary в ВК.
*/
exports.VK_COLOR_PRIMARY = 'primary';
/**
* Цвет кнопки secondary в ВК.
*/
exports.VK_COLOR_SECONDARY = 'secondary';
/**
* Цвет кнопки negative в ВК.
*/
exports.VK_COLOR_NEGATIVE = 'negative';
/**
* Цвет кнопки positive в ВК.
*/
exports.VK_COLOR_POSITIVE = 'positive';
/**
* Тип кнопки текст
*/
exports.VK_TYPE_TEXT = 'text';
/**
* Тип кнопки ссылка
*/
exports.VK_TYPE_LINK = 'open_link';
/**
* Тип кнопки поделиться локацией
*/
exports.VK_TYPE_LOCATION = 'location';
/**
* Тип кнопки оплатить
*/
exports.VK_TYPE_PAY = 'vkpay';
/**
* Тип кнопки открыть приложение
*/
exports.VK_TYPE_APPS = 'open_app';
function _validateVkPayload(payload) {
if (payload == null)
return '';
const str = typeof payload === 'string' ? payload : JSON.stringify(payload);
const encoder = new TextEncoder();
const bytes = encoder.encode(str);
if (bytes.length > 255) {
return new TextDecoder().decode(bytes.slice(0, 255));
}
return str;
}
/**
* Получение кнопок в формате ВК
* @param buttons Кнопки, которые необходимо отобразить
*/
function buttonProcessing(buttons) {
const groups = [];
const finalButtons = [];
let index = 0;
(0, utils_1.getCorrectButtons)(buttons).forEach((button) => {
if (button.type === null) {
button.type = button.hide === index_1.Buttons.B_LINK ? exports.VK_TYPE_LINK : exports.VK_TYPE_TEXT;
}
let object = {
action: {
type: button.type,
},
};
if (button.url) {
object.action.type = exports.VK_TYPE_LINK;
object.action.link = button.url;
}
object.action.label = button.title;
if (button.payload) {
if (typeof button.payload === 'string') {
object.action.payload = button.payload;
}
else {
object.action.payload = JSON.stringify(button.payload);
}
}
if (button.payload?.color !== undefined && !button.url) {
object.color = button.payload.color;
}
if (button.type === exports.VK_TYPE_PAY) {
object.hash = button.payload?.hash || null;
}
object = { ...object, ...button.options };
const groupOptions = button.options[exports.GROUP_NAME];
if (groupOptions === undefined) {
finalButtons[index] = object;
index++;
}
else {
if (object[exports.GROUP_NAME] !== undefined) {
object[exports.GROUP_NAME] = undefined;
}
if (groups[+groupOptions] === undefined) {
groups[+groupOptions] = index;
finalButtons[index] = [object];
index++;
}
else {
finalButtons[groups[+groupOptions]].push(object);
}
}
if (object.action.payload && typeof object.action.payload !== 'string') {
object.action.payload = _validateVkPayload(object.action.payload);
}
});
return {
one_time: !!finalButtons.length,
buttons: finalButtons,
};
}