昨日書いたBotkitを使ったBotはIBM 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'
となっている。