2016-09-25 73 views
1

查看Botkit的文檔後,我沒有看到某種機器人在特定時間自行向某個頻道發起消息的方式。我試過的做法是爲.startRTM函數提供一個回調函數,它可以在特定的時間執行我想要的操作,但是調用是異步的以從另一個API檢索信息。有沒有更好的方法來處理這個問題,而不是在while(1) {}調用中堅持一切?如果沒有,我怎樣才能讓r.getHot回調成功,因爲JS在主線程上運行,所以它會跳過回調函數。變量r來自snoowrap庫。如何使用botkit在特定時間發送消息?

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" 
         }); 
        }); 
       } 
      } 
     } 
    } 
}); 

回答

0

啊,我在第一

誤解你的問題,我會建議尋找到node-schedule。請注意,如果你在睡覺他們的進程的主機上,我認爲這不會起作用。否則,這是比while循環更好的方法。

離開低於其他人誰發現這個


發起而不Botkit用戶輸入的信息:

生成一個機器人,var bot = controller.spawn(opts),然後調用bot.say()的任何地方BOT是範圍。

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

欲瞭解更多信息,請the docs

相關問題