Slack用の妹(Elona)botを作ったお話

Slack用の妹(Elona)botを作ったお話

事の発端

以前、Google Apps Scriptと連携させて社内勉強会の出欠を取るSlack用のbotを作成したのですが、次に何作ろうかな〜と考えていたのでした。

そんなときに別会社の先輩(@chemieclubさん)と呑みに行くことになりまして、先輩に何気なく「次作るの何が良いですかね〜」と聞いたときに「妹(Elona)botが欲しい」という話しになったのがきっかけです。

ちなみに関係ありませんがアイキャッチの画像はSlackのサンフランシスコオフィスらしいです。めちゃくちゃオシャレですよね…!

こちらはSlack公式のブランドガイドラインからお借りしました。

妹(Elona)botの有する機能

実は、僕はElonaについて名前とゲームであることぐらいしか知らなかったので、もちろん妹(Elona)のことも知りませんでした(

先輩からある程度説明を受けた知識と、Elonaのwikiを見ながらどんな機能を実装するか決めました。

1.ユーザーに対して定期的に話しかけてくる

妹(Elona)はゲーム内で何もしてなくても定期的に話しかけてくると聞きましたので、ユーザー側で指定したインターバル毎に妹botから話しかけてくる機能を実装しました。

インターバルは10分〜24時間の中で指定できるのですが、妹botは深夜でも容赦なく話しかけてきます!

それが原因かどうかはわかりませんが、残念ながら今はこの機能を使っている人はいません。。

ちなみに設定を解除したときは妹(Elona)の敗北テキストが表示されます。

2.ユーザーの入力に対して反応してくれる

やり取りができたほうが楽しいので、特定のワードに反応する機能を実装しました。

一応会社で使ってるSlackチームなので、スラッシュコマンドを入力したチャンネルでのみ反応するようにしました。DMチャンネルでも実行できます。

“妹” という単語に反応するのですが、いろんな “妹” の入力に反応するようにしました。その方が楽しい気がしたので!


↑はしゃぐ二人の図

3.妹(Elona)に対して帰宅を宣言できる

スラッシュコマンドを用いて帰宅を宣言できます!

疲れて帰ってきたときなんかに使えばいいんじゃないかな!

4.妹(Elona)に対して勝利を宣言できる

スラッシュコマンドを用いて勝利を宣言できます!

なにかに勝利したときなんかに使えばいいんじゃないかな!(投げやり)

妹botは上記4つの機能を搭載しています。1,2が主な機能で3,4はおまけで実装したようなものですが…w

妹(Elona)botの仕組み

ここからは少しだけ技術的なお話を書きます。

ガッツリした技術面のお話は気が向いたらそのうち別の記事にしようと思いますので、この記事ではサクッと、どんな構成で動いているとかその辺のお話を_(:3」∠)_

Slack botの種類について

Qiitaの記事で非常にわかりやすくまとめて下さっている方がいらっしゃいましたので、こちらをご覧ください。

Slack Botの種類と大まかな作り方 – Qiita

bot作成で一番簡単な方法としては、先程のリンク先の1番目に書いてあるWebhookを使用する方法だと思います。

Incoming(botからの発言)しか書かれていませんがOutgoing(botでのメッセージ受信)も用意されています。 Outgoing Webhooks | Slack

僕は表でいうと2,4,5番目の方法をそれぞれ使用しています。

  • Slash command
  • Bot users (Event API利用)
  • Bot users (フル)

Webサーバーが必要な機能ばかり使っていますが、サーバーは用意していません。構成に寄りますがお金かかりますしね_(:3」∠)_

できるだけ無料で実装したかったので、今回は別の方法をとっています。

Webサーバーについて

Webサーバーの代わりにGoogle Apps Scriptを利用しています。サーバーレスで簡易に実行できますし、GETやPOSTなどHTTPメソッドの実装も可能です。

一部制限がありますが、基本的には無料で使えます! Quotas for Google Services  |  Apps Script  |  Google Developers

これに加えて、データベースの代わりとしてGoogle Fusion Tablesを使用しています。しかしこの選択が後々問題を起こすことに…

その話はまた後日書きたいと思います。

まとめ

このような感じでサクッと作ってみました。

作り始めてから1~2週間ぐらいで作ったと思います。実は作ったのはもう4ヶ月ほど前のことなのであんまり覚えてない…

先輩にも一応喜んでもらえたので、個人的には満足です!w