如何使用botkit在特定时间发送消息?

时间:2016-09-25 02:59:07

标签: javascript node.js slack-api botkit

在浏览了Botkit的文档之后,我没有看到机器人在某个时间自行向某个频道发送消息的方法。我尝试过做的是为.startRTM函数提供一个回调函数,该函数执行我希望它在特定时间执行的操作,但是调用是异步的,以从另一个API检索信息。有没有比在while(1) {}电话中坚持一切更好的方法来解决这个问题?如果没有,我怎么能让r.getHot回调成功,因为JS在主线程上运行,所以它将跳过回调函数。变量r来自snoowrap库。

var bot = controller.spawn({
        token: process.env.slacktoken,
        incoming_webhook: {
            url:  process.env.webhookurl
        }
}).startRTM(function(err, bot, payload) {
    if (!err) {
        while(1){
            for (var i = 0; i < allowableTimes.length; i++) {
                if (new Date().getTime() == allowableTimes[i].getTime()) {
                    r.getHot('aww', {limit: 1}).then(function(res){
                        var url = res[0].url;
                        var title = res[0].title;
                        console.log(url);
                        console.log(title);
                        bot.sendWebhook({
                            username: "bawwt",
                            icon_emoji: ":smile_cat:",
                            text: "<" + url + "|" + title + ">",
                            channel: "#random"
                        });
                    });
                }
            }
        }
    }
});

1 个答案:

答案 0 :(得分:0)

啊,我最初误读了你的问题

我建议调查node-schedule。请注意,如果您是在主持人处理其进程的主机上,我认为这不会起作用。否则,这是一个比while循环更好的方法。

将以下内容留给找到此内容的其他人

使用Botkit发送无用户输入的消息:

生成机器人var bot = controller.spawn(opts),然后在范围内的任何地方调用bot.say()。

bot.say(
  {
    text: 'my message text',
    channel: 'C0H338YH4' // a valid slack channel, FB
  }
);

有关详细信息,请查看the docs