UNPKG

vvlad1973-telegram-framework

Version:
770 lines (578 loc) 21.8 kB
'use strict'; import { TelegramBotEx } from '../index.js'; import express from 'express'; import bodyParser from 'body-parser'; import VCard from 'vcard-js'; import { jt, delay } from 'vvlad1973-utils'; import { MessageTypes, UpdateTypes, DiceTypes, ChatActions, ParseModes, KeyboardButtonPollTypes, } from '../classes/enums.js'; import { InputMedia, InputMediaPhoto, InputMediaVideo, } from '../classes/input_media.js'; import InlineKeyboardMarkup from '../classes/inline_keyboard_markup.js'; import ReplyKeyboardMarkup from '../classes/reply_keyboard_markup.js'; import BotCommandsArray from '../classes/bot_commands.js'; import { CallbackQuery } from '../classes/callback_query.js'; import { fileURLToPath } from 'url'; import { dirname } from 'path'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); process.env.TESTMODE = 'YES'; let messageId, token = '2036935523:AAHwlugW92qANZrn_XrTGaQjFPuCJAtUnfs', chatId = 90844863, // chatId = 2045215645, // photoUrl = 'https://www.wiki.com/wikilogo.jpg', // videoUrl = // 'BAACAgIAAxkBAAIY2GHihkfFwiYkpOhhPZNCVaRI7mk6AAJ4EwACULcQS0rEnJEEKXStIwQ', response, // webhookUrl = 'https://1b51-194-15-116-48.ngrok.io', webhookUrl = 'https://app.vvlad1973.keenetic.link', port = 8080; /* vCardStr = 'BEGIN:VCARD\n' + 'VERSION:3.0\n' + 'N:Владислав;Внуковский\n' + 'ORG:ПАО Ростелеком\n' + 'TEL;TYPE=voice,work,pref:+79139121129\n' + 'EMAIL:vladislav.vnukovskiy@rt.ru\n' + 'END:VCARD' */ /* "BEGIN:VCARD\n" + "VERSION:3.0\n" + "N:Vasya;Pupkin\n" + "ORG: Roga & Kopyta\n" + "TEL;TYPE=voice,work,pref:+79139121010\n" + "EMAIL:vasya@gmail.com\n" + "END:VCARD"; */ const app = express(); const bot = new TelegramBotEx(token); /* let token, url = '', maxConnections = 40, apiUrl = 'https://api.telegram.org/bot', senderCapacityLimit = 30, senderCapacityInterval = 1000, senderQueueSize = 10000 */ app.use(bodyParser.json()); app.listen(port); bot.logger.setLevel('trace'); bot.defaultParseMode = ParseModes.HTML; bot.sendByQueue = false; try { response = await bot.getMe(); console.log(jt(response)); } catch (error) { console.error(error); } try { response = await bot.getWebhookInfo(); console.log(jt(response)); } catch (error) { console.error(error); } try { response = await bot.deleteWebhook(); console.log(jt(response)); } catch (error) { console.error(error); } try { response = await bot.setWebhook(webhookUrl, 10); console.log(jt(response)); } catch (error) { console.error(error); } // try { // response = await bot.getFile('BAACAgIAAxkBAAIY2GHihkfFwiYkpOhhPZNCVaRI7mk6AAJ4EwACULcQS0rEnJEEKXStIwQ'); // console.log(jt(response)); // } catch (error) { // console.error(error); // } try { response = await bot.sendMessage(chatId, 'Ready!', { disable_notification: true, }); console.log(jt(response)); } catch (error) { console.error(error); } try { response = await bot.sendChatAction(chatId, 'typi^ng'); console.log(jt(response)); } catch (error) { console.error(error); } // messageId = response.response.result.message_id; // let markup = new ReplyKeyboardMarkup(); // markup.appendRequestPollButton('Опрос', KeyboardButtonPollTypes.ANY); // markup.is_persistent = true; // markup.resize_keyboard = true; // try { // response = await bot.sendMessage(chatId, 'Test', { // reply_markup: markup, // }); // console.log(jt(response)); // } catch (error) { // console.error(error); // } // let video1 = // 'BAACAgIAAxkBAAIY3mHih0tMUahmgMbYOr1zV8SA1IatAAKAEwACULcQSyy2StQRnscyIwQ', // video = // 'BAACAgIAAxkBAAIY2GHihkfFwiYkpOhhPZNCVaRI7mk6AAJ4EwACULcQS0rEnJEEKXStIwQ', // voice = // 'AwACAgIAAxkBAAIZe2Hiuq9PtrJSwAvs_Zcj48lRNXBpAAIbFAACULcYS-HUpvlVyQk1IwQ', // audio = // 'CQACAgIAAxkBAAIZiGHivHdDH99nX2BGogYmMW6bYKhdAAIhFAACULcYS-UC4g-Z3Q5lIwQ', // animation = // 'BQACAgIAAxkBAAIZwmHi25ZNIfYiTLmlB33hBatPaKCIAAKxFAACULcYSxZBT_1eRtYDIwQ', // document = // 'BQACAgIAAxkBAAIZrWHi1uzGRS0u6obdN6zj8j2SwvDLAAKMFAACULcYSzcPeDXScU6vIwQ', // photo = // 'https://static.wikia.nocookie.net/rustarwars/images/8/8f/Wikipedia-logo.jpg', // photo1 = { file: './tests/assets/test.jpg' }, // media = [ // { // type: 'document', // media: { // file: './tests/assets/doc.pdf', // }, // thumbnail: { // file: './tests/assets/thumb.jpg', // }, // caption: 'Caption <b>for document</b>', // }, // { // type: 'document', // media: { // file: './tests/assets/doc.pdf', // }, // thumbnail: { // file: './tests/assets/thumb.jpg', // }, // parse_mode: 'MarkdownV2', // caption: 'Caption _for document_', // } // ]; // try { // response = await bot.sendPhoto(chatId, photo1, { // disable_notification: true, // }); // console.log(jt(response)); // } catch (error) { // console.error(error); // } // try { // response = await bot.sendMediaGroup( // chatId, // media // // , { // // disable_notification: false, // // } // ); // console.log(jt(response)); // } catch (error) { // console.error(error); // } process.exit(); // let markup = new InlineKeyboardMarkup(); // markup.appendTextButton('Yes', 'YES'); // markup.appendTextButton('No', 'NO'); // await bot.editMessageReplyMarkup({ chat_id: chatId, message_id: messageId, reply_markup: markup }); // console.log(jt(response)); //response = await bot.sendMessage(chatId, 'Could you unpin this message?', { reply_markup: markup }); //console.log(jt(response)); // console.log(__dirname); /* console.log(`UserId: ${callbackQuery.from.id}`); // try { // response = await bot.sendPhoto(chatId, { file: './tests/assets/test.jpg' }, 'Test photo', { reply_markup: markup }); // console.log(jt(response)); // } catch (error) { // console.error(error); // } // app.get(`/`, function (request, response) { // console.log('Received GET-query from Telegram web-hook'); // console.log(jt(request.body)); // response.send('Hello World!') // console.log('GET-query response sent: OK(200)'); // //response.send('<html>It works!</html>') // }); // app.post(`/${token}/`, function (request, response) { // console.log('Received POST-query from Telegram web-hook'); // console.log(jt(request.body)); // response.sendStatus(200); // console.log('POST-query response sent: OK(200)'); // bot.processUpdate(request.body); // }); // bot.on(MessageTypes.TEXT, function (userId, chatId, senderData, properties, contents) { // console.log(`[userId=${userId}] Received update:`); // console.log(`\t chat=[${JSON.stringify(chatId, 0, '\t')}]`); // console.log(`\t senderData=[${JSON.stringify(senderData, 0, '\t')}]`); // console.log(`\t properties=[${JSON.stringify(properties, 0, '\t')}]`); // console.log(`\t contents=[${JSON.stringify(contents, 0, '\t')}]`); // bot.sendMessage(chatId, 'OK') // .then(response => { // console.log(response); // }) // .catch(error => { // console.error(jt(error)); // }); // }); // bot.on(UpdateTypes.CALLBACK_QUERY, async function (callbackQuery) { // console.log(jt(callbackQuery)); // let // voice = 'AwACAgIAAxkBAAIZe2Hiuq9PtrJSwAvs_Zcj48lRNXBpAAIbFAACULcYS-HUpvlVyQk1IwQ', // document = 'BQACAgIAAxkBAAIZrWHi1uzGRS0u6obdN6zj8j2SwvDLAAKMFAACULcYSzcPeDXScU6vIwQ', // audio = 'CQACAgIAAxkBAAIZiGHivHdDH99nX2BGogYmMW6bYKhdAAIhFAACULcYS-UC4g-Z3Q5lIwQ', // animation = 'BQACAgIAAxkBAAIZwmHi25ZNIfYiTLmlB33hBatPaKCIAAKxFAACULcYSxZBT_1eRtYDIwQ'; // let // vCard = new VCard([]); // vCard.add(); // console.log(vCard); // vCard.firstName = 'Eric'; // vCard.middleName = 'J'; // vCard.lastName = 'Nesser'; // vCard.organization = 'ACME Corporation'; // //vCard.photo.attachFromUrl('https://avatars2.githubusercontent.com/u/5659221?v=3&s=460', 'JPEG'); // vCard.workPhone = '312-555-1212'; // vCard.birthday = new Date(1985, 0, 1); // vCard.title = 'Software Developer'; // vCard.url = 'https://github.com/enesser'; // vCard.note = 'Notes on Eric'; // console.log(vCard.toString()); // callbackQuery.answerContact('+79139121129', 'Влад', '', { vcard: vCardStr }); // callbackQuery.answer('Ok'); //bot.answerCallbackQuery(callbackQuery.id, {text: 'Ok', showAlert: true}); /* callbackQuery.answer({ text: 'Ok', show_alert: true }) .catch(error => { console.error(error); }); */ /* bot.sendMessage(callbackQuery.from.id, 'Test message') .catch(error => { console.error(error); }); */ /* let text; let newImageUrl = 'https://static.wikia.nocookie.net/rustarwars/images/8/8f/Wikipedia-logo.jpg', inputMediaPhoto2 = { type: 'photo', media: newImageUrl, caption: 'This is a caption for the <tg-spoiler>new photo</tg-spoiler>', parse_mode: ParseModes.HTML }, videoFileId = 'BAACAgIAAxkBAAIYwGHidn28_jy5GyO-sWF-cIoJb224AAJJEwACULcQS_d5nMwV4AuhIwQ', inputMediaPhoto = new InputMediaPhoto(newImageUrl, 'Test caption of photo', ParseModes.HTML), inputMediaVideo = new InputMediaVideo(videoFileId, undefined, 'Caption of video'); console.log(jt(inputMediaPhoto)); if (callbackQuery.data === 'YES') text = 'NO' else text = 'YES'; let m = new InlineKeyboardMarkup(); m.appendTextButton(text, text); */ /* callbackQuery.editMedia(inputMediaVideo, { preserve_reply_markup: true }) .catch(error => { console.log(jt(error)); }); */ /* let vcardStr = "BEGIN:VCARD\n" + "VERSION:3.0\n" + "N:Solo;Han\n" + "ORG:Scruffy-looking nerf herder\n" + "TEL;TYPE=voice,work,pref:+1234567890\n" + "EMAIL:hansolo@mfalcon.com\n" + "END:VCARD"; */ /* try { await callbackQuery.answerContact('+79139121129', 'Влад', 'Внуковский', { vcard: vCardStr }); } catch (error) { console.log(jt(error)); } */ /* try { callbackQuery.answerVideo(videoFileId, 'New video'); } catch (error) { console.log(jt(error)); } */ // console.log(`ChatId: ${callbackQuery.message.chat.id}`); // console.log(`Callback data: ${callbackData}`); // console.log(`Sender data: ${jt(senderData)}`); // console.log(`Callback query Id: ${jt(callbackQueryId)}`); // console.log(`User ${senderData.first_name} answered ${jt(callbackData)}`); //*/ /* response = await bot.answerCallbackQuery(callbackQueryId, { text: 'Thank You!', showAlert: true }); console.log(jt(response)); response = await bot.sendMessage(userId, `You said ${callbackData}`); console.log(jt(response)); if (callbackData === 'YES') { response = await bot.unpinChatMessage(chatId, messageId); console.log(jt(response)); } */ // }); // let // video1 = 'BAACAgIAAxkBAAIY3mHih0tMUahmgMbYOr1zV8SA1IatAAKAEwACULcQSyy2StQRnscyIwQ', // video = 'BAACAgIAAxkBAAIY2GHihkfFwiYkpOhhPZNCVaRI7mk6AAJ4EwACULcQS0rEnJEEKXStIwQ', // voice = 'AwACAgIAAxkBAAIZe2Hiuq9PtrJSwAvs_Zcj48lRNXBpAAIbFAACULcYS-HUpvlVyQk1IwQ', // audio = 'CQACAgIAAxkBAAIZiGHivHdDH99nX2BGogYmMW6bYKhdAAIhFAACULcYS-UC4g-Z3Q5lIwQ', // animation = 'BQACAgIAAxkBAAIZwmHi25ZNIfYiTLmlB33hBatPaKCIAAKxFAACULcYSxZBT_1eRtYDIwQ', // document = 'BQACAgIAAxkBAAIZrWHi1uzGRS0u6obdN6zj8j2SwvDLAAKMFAACULcYSzcPeDXScU6vIwQ'; /* try { response = await bot.sendVideo(chatId, video1, 'Could you unpin this message?', { reply_markup: markup }); console.log(jt(response)); } catch (error) { console.error(error); } try { response = await bot.sendAnimation(chatId, animation, 'Like you this <b>animation</b>?', { reply_markup: markup }); console.log(jt(response)); } catch (error) { console.error(error); } */ //let vcardStr = /* "BEGIN:VCARD\n" + "VERSION:3.0\n" + "N:Vasya;Pupkin\n" + "ORG: Roga & Kopyta\n" + "TEL;TYPE=voice,work,pref:+79139121010\n" + "EMAIL:vasya@gmail.com\n" + "END:VCARD"; */ /* try { response = await bot.sendContact(chatId, '+1234567890', 'Solo', '', { vcard: vCardStr }); console.log(jt(response)); } catch (error) { console.error(error); } */ /* response = await bot.sendPhoto(chatId, photoUrl, 'Test photo'); console.log(jt(response)); messageId = response.response.result.message_id; await delay(3000); await bot.editMessageCaption('This is a new caption', { chatId: chatId, messageId: messageId }); console.log(jt(response)); await delay(3000); let newImageUrl = 'https://static.wikia.nocookie.net/rustarwars/images/8/8f/Wikipedia-logo.jpg', inputMediaPhoto = { type: 'photo', media: newImageUrl, caption: 'This is a caption for the <tg-spoiler>new photo</tg-spoiler>', parse_mode: ParseModes.HTML }; await bot.editMessageMedia(inputMediaPhoto, { chatId: chatId, messageId: messageId }); console.log(jt(response)); response = await bot.forwardMessage(chatId, chatId, messageId); console.log(jt(response)); response = await bot.sendChatAction(chatId, ChatActions.UPLOAD_DOCUMENT); console.log(jt(response)); await delay(3000); response = await bot.deleteMessage(chatId, messageId); console.log(jt(response)); let markup = new InlineKeyboardMarkup(); markup.appendTextButton('Yes', 'YES'); markup.appendTextButton('No', 'NO'); response = await bot.sendMessage(chatId, 'Could you unpin this message?', { replyMarkup: markup }); console.log(jt(response)); messageId = response.response.result.message_id; response = await bot.pinChatMessage(chatId, messageId); console.log(jt(response)); await delay(3000); await bot.unpinAllChatMessages(chatId); console.log(jt(response)); response = await bot.deleteMessage(chatId, messageId); response = await bot.sendDice(chatId, { emoji: DiceTypes.DICE }); console.log(jt(response)); response = await bot.deleteMyCommands(); console.log(jt(response)); let commands = new BotCommandsArray(); commands.addCommand('help', 'Get help from support'); commands.addCommand('faq', 'Get FAQ'); response = await bot.setMyCommands(commands); console.log(jt(response)); response = await bot.getMyCommands(); console.log(jt(response)); bot.on(MessageTypes.COMMAND, async function (userId, chatId, command, params, senderData, contents) { console.log(`UserId: ${userId}`); console.log(`ChatId: ${chatId}`); console.log(`Command: ${command}`); console.log(`params: ${jt(params)}`); response = await bot.sendMessage(chatId, `Your command is ${command}`); console.log(jt(response)); }); */ /* import TelegramBot, { ReplyKeyboardRemove, ForceReply, ReplyKeyboardMarkup, } from "./index.js"; import { PollTypes } from "./definitions.js"; let ik = new InlineKeyboardMarkup(); class TelegramBotEx extends TelegramBot { constructor() { super(); } processUpdate(contents) { console.log('YES!!!'); super.processUpdate(contents); } } const botEx = new TelegramBotEx(token); botEx.processUpdate({message: 'test'}); process.exit(); bot.on('*', function (userId, chatId, senderData, properties, contents) { console.log(`[userId=${userId}] Received update:`); console.log(`\t chat=[${JSON.stringify(chatId, 0, '\t')}]`); console.log(`\t senderData=[${JSON.stringify(senderData, 0, '\t')}]`); console.log(`\t properties=[${JSON.stringify(properties, 0, '\t')}]`); console.log(`\t contents=[${JSON.stringify(contents, 0, '\t')}]`); bot.sendMessage(chatId, 'OK') .then(response => { console.log(response); }) .catch(error => { console.error(error); }); }); messageId = response.response.result.message_id; response = await bot.forwardMessage(chatId, chatId, messageId); console.log(jt(response)); messageId = response.response.result.message_id; bot.on(UpdateTypes.MESSAGE, async function (userId, chatId, senderData, contents) { let forceReply = new ForceReply('To be or not to be?'); try { response = await bot.sendMessage(userId, 'ForceRepy test!', { replyMarkup: forceReply }); console.log(jt(response)); } catch (error) { console.error(error); } }); bot.on(UpdateTypes.CALLBACK_QUERY, async function (userId, chatId, callbackQueryId, callbackData, senderData, contents) { console.log(`UserId: ${userId}`); console.log(`ChatId: ${chatId}`); console.log(`Callback data: ${callbackData}`); console.log(`Sender data: ${jt(senderData)}`); console.log(`Callback query Id: ${jt(callbackQueryId)}`); console.log(`User ${senderData.first_name} answered ${jt(callbackData)}`); try { await bot.answerCallbackQuery(callbackQueryId, { text: 'Thank You!', showAlert: true }); } catch (error) { console.error(error); } try { await bot.sendMessage(userId, `You said ${callbackData}`); } catch (error) { console.error(error); } if (callbackData === 'YES') { try { await bot.unpinChatMessage(chatId, messageId); } catch (error) { } } else { try { await bot.editMessageText('You said NO. Why?', { chatId: chatId, messageId: messageWithCaptionId }); } catch (error) { console.error(error); } } }); ik.addPayButton('Pay NOW!'); ik.addPayButton('Pay anywhere'); try { ik.deleteButton(0, 0); } catch (error) { console.error(error); } ik.addCallbackGameButton('Show must go on!'); ik.addCallbackGameButton('Life is pain!'); ik.appendRows(); ik.appendTextButton('Text button', 'pressed_text_button'); ik.insertUrlButton('Link to Heaven', 'http://rt.ru'); ik.appendRows(); ik.appendSwitchInlineQueryButton('Switch Inline Query 1', 'Some text'); ik.insertSwitchInlineQueryButton('Switch Inline Query 1', 'Some text'); ik.appendRows(); ik.appendSwitchInlineQueryCurrentChatButton('Switch Inline Query 2', 'Some text'); ik.insertSwitchInlineQueryCurrentChatButton('Switch Inline Query 2', 'Some text'); ik.appendRows(); ik.appendLoginUrlButton('Login', 'https://a513-194-15-116-48.ngrok.io/login/', 'Forward text'); ik.insertLoginUrlButton('Login', 'https://a513-194-15-116-48.ngrok.io/login/', 'Forward text'); console.log(jt(ik)); try { response = await bot.sendMessage(chatId, 'This is an inline keyboard test', { replyMarkup: ik }); console.log(jt(response)); } catch (error) { console.error(error); } response = await bot.sendMessage(chatId, 'Could you unpin this message?', { replyMarkup: markup }); console.log(jt(response)); messageId = response.response.result.message_id; chatId = response.response.result.chat.id; response = await bot.getMyCommands(); console.log(jt(response)); let text = 'This is a <b>text</b> with <i>HTML</i> <tg-spoiler>markdown</tg-spoiler>' bot.defaultParseMode = ParseModes.HTML; response = await bot.sendMessage(chatId, text, { parseMode: ParseModes.NONE }); console.log(jt(response)); response = await bot.sendPhoto(chatId, photoUrl, 'Test photo with caption'); console.log(jt(response)); messageId = response.response.result.message_id; response = await bot.sendChatAction(chatId, ChatActions.UPLOAD_DOCUMENT); console.log(jt(response)); await delay(3000); await bot.editMessageCaption('This is a new caption', { chatId: chatId, messageId: messageId }); console.log(jt(response)); await delay(3000); await bot.editMessageReplyMarkup({ chatId: chatId, messageId: messageId, replyMarkup: markup }); console.log(jt(response)); await bot.unpinAllChatMessages(chatId); console.log(jt(response)); let keyboard = new ReplyKeyboardMarkup(true, true, 'some text', true); keyboard.appendTextButton('Four'); keyboard.appendTextButton('Five'); keyboard.appendTextButton('Six'); keyboard.insertRows(0, 1); keyboard.appendTextButton('Two', 0); keyboard.appendTextButton('Three', 0); keyboard.insertTextButton('One', 0); keyboard.appendRows(); keyboard.appendTextButton('Zero'); keyboard.appendRows(); keyboard.appendRequestPollButton('1.Get poll', PollTypes.REGULAR, 3); keyboard.insertRequestPollButton('2.Get quiz', PollTypes.QUIZ); keyboard.appendRows(); keyboard.appendRequestContactButton('1.Send phone', 4); keyboard.insertRequestContactButton('2.Send phone'); keyboard.appendRows(); keyboard.appendRequestLocationButton('1.Send location', 5); keyboard.insertRequestLocationButton('2.Send location'); await bot.sendMessage(chatId, 'This is a message with keyboard', { replyMarkup: keyboard }); console.log(jt(response)); await delay(30000); let removeKeyboard = new ReplyKeyboardRemove(); await bot.sendMessage(chatId, 'Now keyboard was deleted', { replyMarkup: removeKeyboard }); console.log(jt(response)); */