Slackで記念日を通知

Slackで記念日の通知をボットにやらせると捗るよ、っていうお話。

どんな機能か

「記念日」と投稿すると、設定した記念日から何日経過したかを通知します。
こちらのブログで紹介されている機能を自分で実装しました。

このように、我が家のSlackボットであるウツボットくんが各種イベントからの経過日数をお知らせしてくれます。

利用したもの

参考にしたブログと同様に、はてなカウンティングに登録した記念日のページのスクショを撮り、Gyazoにアップロードしています。
スクショの取得と切り抜きにはwkhtmltoimageを利用しています。

SlackボットのライブラリはHubotではなく、Python製のslackbotを利用しています。
反応させたい単語をデコレータに記述する点が特徴的なライブラリです。

定期実行

任意のタイミングだけでなく、cronを使って毎朝投稿させています。

毎朝の投稿は少し工夫して、以下のいずれかの条件を満たす記念日しか投稿されないようにしています。

素数判定にはミラー・ラビン素数判定法を使っています。
コードはこちらのブログのものを利用しました。
理由は、いくつか試した中で最も高速だったからです。

つい最近まで、経過日数がキリのいい数字か、素数か、の2つの条件での運用だったのですが、GW中にソースコードを改修した際に日にちが同じという条件も加えました。

日にちが同じ場合のメッセージは、経過日数の画像はなく、○年目の記念日です🎉のようなテキストだけになっています。
テキストだけは寂しいので、そのうち画像などでリッチにしたいと考えています。

おわりに

我が家で運用しているボットの機能の1つである、記念日機能を紹介しました。
時間の経過を感じたり、素数を知れたりと割と便利な機能です。

1129 (いい肉) が素数であることを、この機能のおかげで知ることができました。

ちなみに、設定している記念日は偶然にも偶数日ずつ離れているので、たまに素数条件での投稿が重なります。
この現象も楽しんでいます。

参考