Posted at
SlackDay 11

Clojureでコードの問題を解けるまでleave出来ないbotを作ってみた

More than 1 year has passed since last update.

image

投稿が遅れてしまい大変申し訳ありません。。。

この記事は『Slack Advent Calendar 2016』11日目の記事です。

前回はhoto17296さんの「Slack 特化 Bot フレームワーク「Shrike」」でした。


Botを作った経緯

当Advent Calendarで1日目の記事から既に圧倒的な存在感を出していた蟻地獄botですが、何がきっかけだったのかインターン先のSlackにもゲリラ的に出現しており、着々と治安維持を進めております。

そんな恐ろしい働き者の蟻地獄botですが、ふと"蟻地獄がプログラミングの問題を出題して、解けた人だけ退出出来るようにすれば馴染みのない言語でもゲーム感覚でみんな書いてくれるのでは…?"と思い、今回のbotの実装に踏み切りました。


実際の挙動

以下の容量でプライベートチャット等を通して問題を登録し、後は動作させたいチャンネル(もしくはグループ)へinviteすれば動作します。

image

このbotが動作しているチャンネルを離れようとすると、↓のように強制的に再度inviteされた後、登録された問題からランダムに出題されます。

image

後はリプライで答えを書いて問題を解くだけです!

image

見事回答できたメンバーは、botによる賞賛のもとチャンネルを抜ける事が出来ます


技術的な話

今までSlack向けのbotを作る際は、たいへんお手軽で便利なliquidzさんのjubotをお借りして作っていたのですが


  • Incoming Webhook or Outgoing Webhookでのbotしか実現できない

  • チャンネルへの招待等のAPIに対応していない

と言った経緯があったため、今回始めてclj-slackを使用した実装となりました。

jubotのようなフルスタックな実装でない分手間はかかりますが、Slack APIの仕様にそっくりでクセがなく大変扱いやすい印象でした。

ClojureによるSlack botはGo等に比べればあまり盛り上がっていない印象がありますが、普通に使えるライブラリも揃っているので、Clojureを書き慣れているのであれば率先して使っても良いかな、と思った次第でした。

また作成したBotのソースコードはGitHubで公開しておりますので、是非お役立てください。

それでは、良い年末を!