S
S
srko2016-04-05 17:46:24
JavaScript
srko, 2016-04-05 17:46:24

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);
  }
});

If I create a job inside bot.on, then the job cannot be stopped, since the job will be created for each message (as I was already prompted here).
What can be done? How to decide?

Answer the question

In order to leave comments, you need to log in

2 answer(s)
W
WhiteSama, 2016-04-07
@srko

global variable?

S
superivankorolev, 2016-04-05
@superivankorolev

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 question

Ask a Question

731 491 924 answers to any question