投稿が遅れてしまい大変申し訳ありません。。。
この記事は『Slack Advent Calendar 2016』11日目の記事です。
前回はhoto17296さんの「Slack 特化 Bot フレームワーク「Shrike」」でした。
Botを作った経緯
当Advent Calendarで1日目の記事から既に圧倒的な存在感を出していた蟻地獄botですが、何がきっかけだったのかインターン先のSlackにもゲリラ的に出現しており、着々と治安維持を進めております。
そんな恐ろしい働き者の蟻地獄botですが、ふと"蟻地獄がプログラミングの問題を出題して、解けた人だけ退出出来るようにすれば馴染みのない言語でもゲーム感覚でみんな書いてくれるのでは…?"と思い、今回のbotの実装に踏み切りました。
実際の挙動
以下の容量でプライベートチャット等を通して問題を登録し、後は動作させたいチャンネル(もしくはグループ)へinviteすれば動作します。
このbotが動作しているチャンネルを離れようとすると、↓のように強制的に再度inviteされた後、登録された問題からランダムに出題されます。
後はリプライで答えを書いて問題を解くだけです!
見事回答できたメンバーは、botによる賞賛のもとチャンネルを抜ける事が出来ます
技術的な話
今までSlack向けのbotを作る際は、たいへんお手軽で便利なliquidzさんのjubotをお借りして作っていたのですが
- Incoming Webhook or Outgoing Webhookでのbotしか実現できない
- チャンネルへの招待等のAPIに対応していない
と言った経緯があったため、今回始めてclj-slackを使用した実装となりました。
jubotのようなフルスタックな実装でない分手間はかかりますが、Slack APIの仕様にそっくりでクセがなく大変扱いやすい印象でした。
ClojureによるSlack botはGo等に比べればあまり盛り上がっていない印象がありますが、普通に使えるライブラリも揃っているので、Clojureを書き慣れているのであれば率先して使っても良いかな、と思った次第でした。
また作成したBotのソースコードはGitHubで公開しておりますので、是非お役立てください。
それでは、良い年末を!