UNPKG

umbot

Version:

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

122 lines (121 loc) 3.94 kB
"use strict"; 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, }; }