vvlad1973-telegram-framework
Version:
Current version: *7.9.5*
770 lines (578 loc) • 21.8 kB
JavaScript
'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));
*/