UNPKG

tgsnake

Version:

Telegram MTProto framework for nodejs.

359 lines (358 loc) 14.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildReplyMarkup = buildReplyMarkup; exports.convertReplyMarkup = convertReplyMarkup; const platform_node_js_1 = require("../../platform.node.js"); async function buildReplyMarkup(replyMarkup, snakeClient) { if ('inlineKeyboard' in replyMarkup) { return await replyMarkupInlineKeyboard(replyMarkup, snakeClient); } if ('keyboard' in replyMarkup) { return await replyMarkupKeyboard(replyMarkup); } if ('removeKeyboard' in replyMarkup) { return await replyMarkupRemoveKeyboard(replyMarkup); } if ('forceReply' in replyMarkup) { return await replyMarkupForceReply(replyMarkup); } } async function replyMarkupInlineKeyboard(replyMarkup, snakeClient) { let rows = []; for (let row = 0; row < replyMarkup.inlineKeyboard.length; row++) { let tempCol = []; for (let col = 0; col < replyMarkup.inlineKeyboard[row].length; col++) { let btn = replyMarkup.inlineKeyboard[row][col]; if ('url' in btn) { if (String(btn.url).startsWith('tg://user?id=')) { const peer = snakeClient._client.resolvePeer(BigInt(String(btn.url).replace('tg://user?id=', ''))); if (peer && peer instanceof platform_node_js_1.Raw.InputPeerUser) { tempCol.push(new platform_node_js_1.Raw.InputKeyboardButtonUserProfile({ text: String(btn.text), userId: new platform_node_js_1.Raw.InputUser({ userId: peer.userId, accessHash: peer.accessHash, }), })); } else { continue; } } else { tempCol.push(new platform_node_js_1.Raw.KeyboardButtonUrl({ text: String(btn.text), url: String(btn.url), })); } continue; } if ('loginUrl' in btn) { tempCol.push(new platform_node_js_1.Raw.InputKeyboardButtonUrlAuth({ text: String(btn.text), requestWriteAccess: btn.loginUrl?.requestWriteAccess || true, fwdText: btn.loginUrl?.forwardText || String(btn.text), url: String(btn.loginUrl?.url), bot: new platform_node_js_1.Raw.InputUser({ userId: btn.loginUrl?.bot.id, accessHash: btn.loginUrl?.bot.accessHash, }), })); continue; } if ('callbackData' in btn) { tempCol.push(new platform_node_js_1.Raw.KeyboardButtonCallback({ text: String(btn.text), requiresPassword: false, data: platform_node_js_1.Buffer.from(String(btn.callbackData)), })); continue; } if ('switchInlineQuery' in btn) { tempCol.push(new platform_node_js_1.Raw.KeyboardButtonSwitchInline({ text: String(btn.text), samePeer: false, query: String(btn.switchInlineQuery), })); continue; } if ('switchInlineQueryCurrentChat' in btn) { tempCol.push(new platform_node_js_1.Raw.KeyboardButtonSwitchInline({ text: String(btn.text), samePeer: true, query: String(btn.switchInlineQueryCurrentChat), })); continue; } if ('callbackGame' in btn) { tempCol.push(new platform_node_js_1.Raw.KeyboardButtonGame({ text: String(btn.text), })); continue; } if ('buy' in btn) { tempCol.push(new platform_node_js_1.Raw.KeyboardButtonBuy({ text: String(btn.text), })); continue; } if ('webApp' in btn) { tempCol.push(new platform_node_js_1.Raw.KeyboardButtonWebView({ text: String(btn.text), url: String(btn.webApp), })); } } rows.push(new platform_node_js_1.Raw.KeyboardButtonRow({ buttons: tempCol, })); } return new platform_node_js_1.Raw.ReplyInlineMarkup({ rows: rows, }); } function replyMarkupKeyboard(replyMarkup) { let rows = []; for (let row = 0; row < replyMarkup.keyboard.length; row++) { let tempCol = []; for (let col = 0; col < replyMarkup.keyboard[row].length; col++) { if (typeof replyMarkup.keyboard[row][col] == 'string') { tempCol.push(new platform_node_js_1.Raw.KeyboardButton({ text: String(replyMarkup.keyboard[row][col]), })); continue; } if (typeof replyMarkup.keyboard[row][col] !== 'string') { let btn = replyMarkup.keyboard[row][col]; if ('requestContact' in btn) { tempCol.push(new platform_node_js_1.Raw.KeyboardButtonRequestPhone({ text: String(btn.text), })); continue; } if ('requestLocation' in btn) { tempCol.push(new platform_node_js_1.Raw.KeyboardButtonRequestGeoLocation({ text: String(btn.text), })); continue; } if ('requestPoll' in btn) { tempCol.push(new platform_node_js_1.Raw.KeyboardButtonRequestPoll({ text: String(btn.text), quiz: Boolean(btn.requestPoll?.toLowerCase() == 'quiz'), })); continue; } if ('text' in btn) { if (!btn.requestPoll && !btn.requestLocation && !btn.requestContact) { tempCol.push(new platform_node_js_1.Raw.KeyboardButton({ text: String(btn.text), })); continue; } } } } rows.push(new platform_node_js_1.Raw.KeyboardButtonRow({ buttons: tempCol, })); } return new platform_node_js_1.Raw.ReplyKeyboardMarkup({ rows: rows, resize: replyMarkup.resizeKeyboard || undefined, singleUse: replyMarkup.oneTimeKeyboard || undefined, placeholder: replyMarkup.inputFieldPlaceholder || undefined, selective: replyMarkup.selective || undefined, }); } function replyMarkupRemoveKeyboard(replyMarkup) { return new platform_node_js_1.Raw.ReplyKeyboardHide({ selective: replyMarkup.selective || undefined, }); } function replyMarkupForceReply(replyMarkup) { return new platform_node_js_1.Raw.ReplyKeyboardForceReply({ singleUse: replyMarkup.singleUse || undefined, selective: replyMarkup.selective || undefined, placeholder: replyMarkup.inputFieldPlaceholder || undefined, }); } async function convertReplyMarkup(replyMarkup, SnakeClient) { if (replyMarkup instanceof platform_node_js_1.Raw.ReplyKeyboardForceReply) { replyMarkup; let markup = { forceReply: true, selective: replyMarkup.selective || undefined, singleUse: replyMarkup.singleUse || undefined, inputFieldPlaceholder: replyMarkup.placeholder || undefined, }; return markup; } if (replyMarkup instanceof platform_node_js_1.Raw.ReplyKeyboardHide) { replyMarkup; let markup = { removeKeyboard: true, selective: replyMarkup.selective || undefined, }; return markup; } if (replyMarkup instanceof platform_node_js_1.Raw.ReplyKeyboardMarkup) { replyMarkup; let rows = []; for (let i = 0; i < replyMarkup.rows.length; i++) { let col = []; let btns = replyMarkup.rows[i]; for (let j = 0; j < btns.buttons.length; j++) { let btn = btns.buttons[j]; if (btn instanceof platform_node_js_1.Raw.KeyboardButton) { btn; let cc = { text: btn.text, }; col.push(cc); } if (btn instanceof platform_node_js_1.Raw.KeyboardButtonRequestPhone) { btn; let cc = { text: btn.text, requestContact: true, }; col.push(cc); } if (btn instanceof platform_node_js_1.Raw.KeyboardButtonRequestGeoLocation) { btn; let cc = { text: btn.text, requestLocation: true, }; col.push(cc); } if (btn instanceof platform_node_js_1.Raw.KeyboardButtonRequestPoll) { btn; let cc = { text: btn.text, requestPoll: btn.quiz ? 'quiz' : 'regular', }; col.push(cc); } } rows.push(col); } let markup = { keyboard: rows, resizeKeyboard: replyMarkup.resize || undefined, oneTimeKeyboard: replyMarkup.singleUse || undefined, inputFieldPlaceholder: replyMarkup.placeholder || undefined, selective: replyMarkup.selective || undefined, }; return markup; } if (replyMarkup instanceof platform_node_js_1.Raw.ReplyInlineMarkup) { replyMarkup; let rows = []; for (let i = 0; i < replyMarkup.rows.length; i++) { let col = []; let btns = replyMarkup.rows[i]; for (let j = 0; j < btns.buttons.length; j++) { let btn = btns.buttons[j]; if (btn instanceof platform_node_js_1.Raw.KeyboardButtonUserProfile) { btn; let cc = { text: btn.text, url: `tg://user?id=${btn.userId}`, }; col.push(cc); } if (btn instanceof platform_node_js_1.Raw.KeyboardButtonUrl) { btn; let cc = { text: btn.text, url: btn.url, }; col.push(cc); } if (btn instanceof platform_node_js_1.Raw.KeyboardButtonUrlAuth) { btn; let me = SnakeClient._me; let ee = { id: me?.id, accessHash: me?.accessHash, }; let dd = { requestWriteAccess: true, forwardText: btn.fwdText || String(btn.text), url: String(btn.url), bot: ee, }; let cc = { loginUrl: dd, text: btn.text, }; col.push(cc); } if (btn instanceof platform_node_js_1.Raw.KeyboardButtonCallback) { btn; let cc = { text: btn.text, callbackData: btn.data.toString('utf8'), }; col.push(cc); } if (btn instanceof platform_node_js_1.Raw.KeyboardButtonSwitchInline) { btn; if (btn.samePeer) { let cc = { text: btn.text, switchInlineQueryCurrentChat: btn.query, }; col.push(cc); } else { let cc = { text: btn.text, switchInlineQuery: btn.query, }; col.push(cc); } } if (btn instanceof platform_node_js_1.Raw.KeyboardButtonGame) { btn; let cc = { text: btn.text, callbackGame: btn.text, }; col.push(cc); } if (btn instanceof platform_node_js_1.Raw.KeyboardButtonBuy) { btn; let cc = { text: btn.text, buy: btn.text, }; col.push(cc); } if (btn instanceof platform_node_js_1.Raw.KeyboardButtonWebView) { btn; let cc = { text: btn.text, webApp: btn.url, }; col.push(cc); } if (btn instanceof platform_node_js_1.Raw.KeyboardButtonSimpleWebView) { btn; let cc = { text: btn.text, webApp: btn.url, }; col.push(cc); } } rows.push(col); } let markup = { inlineKeyboard: rows, }; return markup; } }