1

在查看了 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"
                        });
                    });
                }
            }
        }
    }
});
4

1 回答 1

0

啊,我一开始看错了你的问题

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

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


使用 Botkit 在没有用户输入的情况下发起消息:

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

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

有关更多信息,请查看文档

于 2017-05-03T15:03:30.013 回答