Help us understand the problem. What is going on with this article?

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

More than 3 years have 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で公開しておりますので、是非お役立てください。
それでは、良い年末を!

eure
オンラインデーティングサービス「Pairs」の運営・開発をしている企業。様々なモダンな技術を駆使してビジネスを成長させています。
https://eure.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away