Не могу заставить работать бота для Telegram. Может кто-то взглянет на код?
Как из метода объекта вытянуть переменную (id чата, которое я могу получить только при отправке сообщения боту) и передать его во внешнюю функцию?
Код с пояснениями:
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);
}
});
Если создаю job внутри bot.on, то job нельзя остановить, так как job будет создаваться для каждого сообщения (как мне тут уже подсказывали).
Что можно сделать? Как решить?