在浏览了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"
});
});
}
}
}
}
});
答案 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