tgsnake
Version:
Telegram MTProto framework for nodejs.
359 lines (358 loc) • 14.2 kB
JavaScript
"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;
}
}