1

Botkit のドキュメントを調べたところ、ボットが特定の時間にチャネルへのメッセージを単独で開始する方法がわかりません。私がやろうとしたことは、特定の時間に実行したいことを行う .startRTM 関数にコールバック関数を提供することですが、呼び出しは別の API から情報を取得するために非同期です。while(1) {}すべてを通話に固執するよりも、これにアプローチするより良い方法はありますか? そうでない場合、JS がメイン スレッドで実行されているため、r.getHot コールバックを成功させるにはどうすればよいのでしょうか。コールバック関数はスキップされます。変数 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 でユーザー入力なしでメッセージを発信するには:

ボットをスポーンし、ボットvar bot = controller.spawn(opts)がスコープ内にある任意の場所で bot.say() を呼び出します。

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

詳細については、ドキュメントをご覧ください

于 2017-05-03T15:03:30.013 に答える