@lskjs/bots-base
Version:
LSK.js plugin for @lskjs/bots module for telegram, slack, discord, whatsapp, twitter, instagram and vk bots creation
65 lines (61 loc) • 1.73 kB
text/typescript
// @ts-ignore
import { Markup } from 'telegraf';
export const createButtons = (button: any, keyboardType: any): any => {
if (!button) return [];
if (Array.isArray(button)) return button.map((b) => createButtons(b, keyboardType));
let type;
let value;
let text;
if (typeof button === 'string') {
type = 'text';
text = button;
} else {
let title;
({ type = 'text', value, title, text } = button);
if (!text && title) text = title;
}
if (!value) value = text;
if (keyboardType === 'inline' && type === 'text') type = 'callback';
if (type === 'text') {
return Markup.button.text(text);
}
if (type === 'callback') {
return Markup.button.callback(text, value);
}
if (type === 'url') {
return Markup.button.url(text, value);
}
if (type === 'poll') {
return Markup.button.pollRequest(text, value);
}
if (type === 'location') {
return Markup.button.locationRequest(text);
}
if (type === 'contact') {
return Markup.button.contactRequest(text);
}
if (type === 'chat') {
return Markup.button.switchToChat(text, value);
}
if (type === 'currentChat') {
return Markup.button.switchToCurrentChat(text, value);
}
if (type === 'login') {
return Markup.button.login(text, value);
}
if (type === 'pay') {
return Markup.button.pay(text);
}
if (type === 'game') {
return Markup.button.game(text);
}
};
export const createKeyboard = (keyboard: any): any => {
const layout = keyboard.layout || keyboard.buttons;
const buttons = createButtons(layout, keyboard.type);
if (keyboard.type === 'inline') {
return Markup.inlineKeyboard(buttons);
}
return Markup.keyboard(buttons);
};
export default createKeyboard;