电报机器人-每天向用户发送消息

时间:2020-04-20 20:28:02

标签: node.js cron telegram telegram-bot node-cron

我想创建一个基于Telegraf的Telegram机器人。我希望该机器人通过启动命令来调度并向用户发送消息。

例如,我希望它可以作为一门课程使用:选择课程后,您每天都会上课。

我尝试使用node-cron(请参见下面的示例),但是它通过启动bot开始发送消息。

const cron = require('node-cron');

const schedule = cron.schedule('*/5 * * * * *', async () => {
  bot.telegram.sendMessage(chatId, 'Hello World');
});

bot.command('/launch', ctx => {
  schedule.launch();
});

bot.command('/stop', ctx => {
  schedule.stop();
});

请提出实现此类机器人的方法。 如果您知道现有的带源代码的Telegraf机器人,请告诉我。

2 个答案:

答案 0 :(得分:1)

您有两种选择。

  1. 使用 setInterval() 函数并检查函数体中的日期。我检查秒,但你可以检查小时或天。
let timer = null;

bot.onText(/\/start/, message => {
    timer = setInterval(() => {
        if(new Date().getSeconds() === 1) {
            bot.sendMessage(message.chat.id, "responce");    
        }
    }, 1000)    
});

bot.onText(/\/stop/, message => {
    clearInterval(timer);
})
  1. 使用外部 npm 包 node-schedule 或类似的东西。
import schedule from "node-schedule";
let job;

bot.onText(/\/start/, message => {
    job = schedule.scheduleJob('1 * * * * *', () => {
        bot.sendMessage(message.chat.id, "responce");
    });
});

bot.onText(/\/stop/, message => {
    if (job) {
        job.cancel()
    }
});

我更喜欢第二种选择,因为它更灵活。

答案 1 :(得分:0)

如果这是我的项目,我将编写一个独立的程序(使用nodejs或其他语言)以运行操作系统cron subsystem(而不是nodejs)经常调用的程序。该程序不能作为Web服务器运行,而可以独立运行。

独立程序将连接到您的用户数据库,检索它需要发送的消息列表,然后使用电报发送。

发送完成后将退出,因为知道操作系统的cron将在时间到来时再次启动它。