Answer the question
In order to leave comments, you need to log in
How to pass a variable from one function to another?
I can't get the Telegram bot to work. Can someone take a look at the code?
How can I extract a variable from the object method (the chat id, which I can only get when sending a message to the bot) and pass it to an external function?
Code with explanations:
var TelegramBot = require('node-telegram-bot-api');
var fetch = require('node-fetch');
var CronJob = require('cron').CronJob;
var token = 'xxxxxxxxxxxxxxxxxxxxxxxx';
var botOptions = {
polling: true,
};
var bot = new TelegramBot(token, botOptions);
var options = {
host: 'https://api.privatbank.ua/p24api/pubinfo?json&exchange&coursid=5',
};
// создаю cron, который выполняет функцию (отправка сообщения с текстом)
// каждые 3 секунды
var job = new CronJob({
cronTime: '*/3 * * * * 1-5',
// должно срабатывать при выполнении job.start();
onTick() {
console.log('→ → → → → working');
// функция не работает, потому что messageChatId объявляется в bot.on()
// как сюда ее передать??!
updateGlobalCurrencyList(messageChatId);
},
// срабатывает по завершении
onComplete() {
console.log('→ → → → → FINISHED');
},
start: false,
timeZone: 'Europe/Kiev',
// здесь можно указать контекст выполнения,
// но что сюда передать я ума не приложу
// ни bot, ни bot.on не работают
// context: ,
});
bot.getMe().then((me) => {
console.log('Hello! My name is %s', me.first_name);
console.log('My id is %s', me.id);
console.log('And my username is %s', me.username);
});
bot.on('text', (msg) => {
// срабатывапет на любое текстовое сообщение
var messageChatId = msg.chat.id;
var messageText = msg.text;
// опции клавиатуры
var opts = {
reply_markup: JSON.stringify({
keyboard: [
['USD'],
['EUR', 'RUB'],
],
one_time_keyboard: false,
resize_keyboard: true,
force_reply: true,
}),
};
if (messageText.indexOf('/every') === 0) {
// запускает cron, но контекст отсюда не берет
// как передать messageChatId в job?
job.start();
}
if (messageText.indexOf('/none') === 0) {
console.log('→ → → → → stoping');
// останавливает cron
job.stop();
}
if (messageText.indexOf('/rates') === 0) {
updateGlobalCurrencyList(messageChatId);
} else if (messageText) {
numberToCurrency(messageChatId, messageText, opts);
}
});
Answer the question
In order to leave comments, you need to log in
And so?
function start(messageChatId){
var job = new CronJob();
job.start();
return job;
}
if(messageText.indexOf('/every') === 0){
start(messageChatId);
}
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question