Всем здравствуйте. Делаю бота для Telegram на Node.js и node-telegram-bot-api. После команды /start бот проверяет наличие юзера в базе, если его нет, то нужно отправить 6 сообщений с определенным интервалом. И вот тут проблема. Если указывать интервал между сообщениями 1-2 минуты, то все ок, но если установить интервал 15-30+ мин, то сообщения не приходят. Складывается ощущение, что Node просто перестает работать не дожидаясь завершения таймаутов. Пробовал и setInterval и setTimeout - результат одинаковый. Подскажите, что не так. Весь код как есть прикладываю ниже.
const TelegramBot = require('node-telegram-bot-api')
const TOKEN = 'API_TOKEN'
const Koa = require('koa')
const Rout = require('koa-router')
const bodyParser = require('koa-bodyparser')
const request = require('request')
const fs = require('fs')
const bot = new TelegramBot(TOKEN)
bot.setWebHook('https://site.com/API_TOKEN')
const app = new Koa()
const router = Rout()
router.post('/API_TOKEN', ctx => {
const {body} = ctx.request
bot.processUpdate(body)
ctx.status = 200
})
app.use(bodyParser())
app.use(router.routes())
const port = 3000
app.listen(port)
var notes = []
const KB = {
refering: 'Реферальная программа',
getRefLink: 'Получить реферальную ссылку'
}
const msgs = {
referMsg: 'тут сообщение'
}
var userName = ''
var firstName = ''
var lastName = ''
var userId = ''
var block1 = `Сообщение 1`
var block2 = `Сообщение 2`
var block3_1 = `Сообщение 3`
var block3_2 = `Сообщение 4`
var block4 = `Сообщение 5`
var block5 = `Сообщение 6`
var isFollower = 0
bot.onText(/\/start/, msg => {
userName = msg.from.username
firstName = msg.from.first_name
lastName = msg.from.last_name
userId = msg.from.id;
notes.push({
'uid': userId,
'text': block1,
'text2': block2,
'text3_1': block3_1,
'text3_2': block3_2,
'text4': block4,
'text5': block5
});
var referId = '0'
var startText = msg.text
if(startText.length > 7){
referId = startText.substr(7);
if(referId.length > 0){
referId = referId
} else {
referId = 0
}
}
request('https://site.com/api?getuser='+userId+'&username='+userName+'&first_name='+firstName+'&last_name='+lastName+'&refer='+referId, (error, response, body) => {
if (error) throw new Error(error)
if(response.statusCode === 200){
const apiData = JSON.parse(body)
const html = `<b>User:</b> - <em>${apiData.id}</em>`
if(apiData.id != 0){
isFollower = 1
}
}
})
const text = `Приветственное сообщение`
bot.sendMessage(msg.chat.id, text, {
reply_markup: {
keyboard: [
[KB.refering]
]
}
})
})
bot.on('message', msg => {
switch (msg.text) {
case KB.refering:
sendRefProgramm(msg.chat.id)
break
case KB.getRefLink:
sendRefLink(msg.chat.id, msg.from.id)
break
}
})
function sendRefProgramm(chatId){
request('http://site.com/public/api?get_user_refs='+chatId, (error, response, body) => {
if (error) throw new Error(error)
if(response.statusCode === 200){
const apiData = JSON.parse(body)
var referals = apiData.referals
var referalInfo = ''
if(referals > 6) {
referalInfo = `На данный момент ты привел ${apiData.referals} человек. Получить бонус можно написав мне @username`
} else {
referalInfo = `На данный момент ты привел ${apiData.referals} человек.`
}
const referalInfoMsg = `Сообщение`+referalInfo
bot.sendMessage(chatId, referalInfoMsg, {
reply_markup: {
keyboard: [
[KB.getRefLink]
]
}
})
}
})
}
function sendRefLink(chatId, userId){
var msg = 'Ваша реферальная ссылка https://t.me/bot?start=' + userId
bot.sendMessage(chatId, msg)
}
if(isFollower == 0){
// Block1
setTimeout(function(){
for (var i = 0; i < notes.length; i++){
bot.sendMessage(notes[i]['uid'], notes[i]['text'], {
reply_markup: JSON.stringify({
inline_keyboard: [
[{ text: 'Регистрация', url: 'https://site.com' }]
]
})
})
bot.sendMessage(notes[i]['uid'], 'Учавствуй в реферальной программе, приглашай друзей и получай бонусы!', {
reply_markup: {
keyboard: [
[KB.refering]
]
}
})
}
// Block 2
setTimeout(function(){
for (var i = 0; i < notes.length; i++){
bot.sendMessage(notes[i]['uid'], notes[i]['text2'], {
reply_markup: {
keyboard: [
[KB.refering]
]
}
})
}
// Block 3
setTimeout(function(){
for (var i = 0; i < notes.length; i++){
bot.sendMessage(notes[i]['uid'], notes[i]['text3_1'])
bot.sendPhoto(notes[i]['uid'], 'img.jpg')
}
// Block 3_2
setTimeout(function(){
for (var i = 0; i < notes.length; i++){
bot.sendMessage(notes[i]['uid'], notes[i]['text3_2'])
bot.sendPhoto(notes[i]['uid'], 'img.jpg')
}
// Block 4
setTimeout(function(){
for (var i = 0; i < notes.length; i++){
bot.sendMessage(notes[i]['uid'], notes[i]['text4'], {
reply_markup: JSON.stringify({
inline_keyboard: [
[{ text: 'Регистрация', url: 'http://site.com' }]
]
})
})
}
// Block 5
setTimeout(function(){
for (var i = 0; i < notes.length; i++){
bot.sendMessage(notes[i]['uid'], notes[i]['text5'], {
reply_markup: {
keyboard: [
[KB.refering]
]
}
})
bot.sendVideo(notes[i]['uid'], 'video.mp4')
notes.splice(i,1);
}
},3573000)
},1797000)
},30000)
},1800000)
},540000)
},60000)
}
const schedule = require('node-schedule');
function sendTime(time, msg, text) {
new schedule.scheduleJob({ start: new Date(Date.now() + Number(time) * 1000 * 60), end: new Date(new Date(Date.now() + Number(time) * 1000 * 60 + 1000)), rule: '*/1 * * * * *' }, function () {
bot.sendMessage(msg.chat.id, text);
});
}
Отправить сообщение с текстом "текст" с ожиданием 5 минут при получении /send:
bot.onText(/\/send/, msg => {
sendTime(5,msg,'текст')
})
Виртуальный выделенный сервер (VDS) становится отличным выбором
Выдает такого рода ошибкуПогуглил, узнал, что она возникает когда пытаешься вызвать функцию как конструктор, но это не конструктор
Как правильно вызвать функцию в Jquery, если её название записано в переменную?
Необходимо строку в файле (в аттаче) длинной 50000 символов отсортировать по маске Xx и xX и удалить их из строки
В общем имеется следующий js код (vue)Переделывал этот же код на jquery, вопрос тот же