Botにリマインドしてもらう

takoratta.hatenablog.com

昨日書いたBotkitを使ったBotIBM Cloudライトアカウントを使って動かしているが、このIBM Cloudライトアカウントは

  • 10日間 開発なしでアプリを自動停止
  • 30日間 活動なしでサービスの自動削除

という制限がある。Botなので、ずっと動かし続けているから、後者は良いとして前者については、開発をし続けるしかない

忘れないようにリマインダーとして、Slackにメッセージを送って貰うようにした。Botkitとnode-cronを用いた。

const = require('cron'); して、startRTM()のところを次のように変えた。

controller.spawn({
    token: process.env.token
}).startRTM((err, bot, payload) => {
    if (err) {
        throw new Error(err);
    }
    new cron.CronJob({
        cronTime: '0 0 9 17 0 *', // 1/17の9時に起動
        onTick: () => {
            bot.say({
                channel: 'takoratta_test', // チャンネル名
                text: 'IBM Cloudライトアカウントを使っているので開発し続けないとサービスが停止します'
            });
        },
        start: true,
        timeZone: 'Asia/Tokyo'
    });
});

cronTimeのところはサービスが停止する数日前にしておけば良い。本当は更新期限をIBM Cloud側から取得したかったが、どうすれば良いかわからないので、ハードコードとしてある。ソースコードを変更後に、cf pushするときに、ここも更新しておけば良い。ここだけ更新するだけで開発したことになるだろうとも思うし、こんなリマインダー送るようなことしなくても、cf pushをローカルマシンでCronしておけば良いではないかというチートも考えつくがやっちゃいけない。

ところで、Cronの時間設定のフォーマットはいつも間違える。今回も月が0から始まることを忘れていた。ここは、cronTime: 'sec min hour day month(0~11) week'となっている。