Lita chat bot でおみくじを引いてもらうメモ


概要

  • Lita chat bot をSlack に参加させる
  • omikuji と発言するとおみくじを引いてくれる(handler の作成)
  • Heroku にデプロイ

前提

  • git
  • GitHub などのサイトにlita-omikuji の名前でリポジトリ作成済
  • heroku toolbelt
  • RSpec
  • Bundler

手順

  • Lita 本体を作る - この本体に対してプラグイン(gem) を追加していくことで機能を拡張する
  • 振る舞い(Handler) を追加する - 本体の機能を拡張するためのgem(lita-omikuji) を作成する
  • omikuji 機能を追加したLita 本体をHeroku にデプロイ

Lita 本体

mkcd ~/lita-bot
bundle init
git init
echo "gem 'lita'" >> Gemfile
echo "gem 'lita-slack'" >> Gemfile
bundle install
echo "gem 'lita-omikuji', github: 'gouf/lita-omikuji'" >> Gemfile
git add .; git commit -m 'Initial Commit'

Slack Token の設定

https://your_team_name.slack.com/services/new にアクセスして、Lita を選択

Lita.configure do |config|
  config.robot.adapter = :slack
  config.adapters.slack.token = "abcd-1234567890-hWYd21AmMH2UHAkx29vb5c1Y"
end

上記のような設定の案内が出てくるので、lita_config.rb に記述

アダプタの変更

アダプタをデフォルトの:shell から:slack に変更する

lita_config.rb

config.robot.adapter = :slack

Lita Omikuji

bundle installlita コマンドが使えるようになったので、lita handler omikuji でテンプレートを作ってもらって、おみくじを引いてくれる機能を書いていく

このとき、下記のように本体とは別のディレクトリで作業する

cd ~/
lita handler omikuji # => lita-omikuji
cd lita-omikuji
git init; git add .; git commit -m 'Initial Commit'
git remote add github [email protected]:my_account_name/lita-omikuji.git

lita handler のときにCI 利用やテストカバレッジ生成についての質問があるが、今回はパス
(自身でプラグインを作成する際には利用されたい)

RSpec

ここで おもむろにテストを適当に書く

lita-omikuji/spec/lita/handlers/omikuji_spec.rb

require 'spec_helper'

describe Lita::Handlers::Omikuji, lita_handler: true do
  it { is_expected.to route('omikuji') }
  it { is_expected.to route('omikuji').to(:omikuji) }
  it 'retrieve message "omikuji"' do
    omikuji_list = %w(大吉 吉 中吉 小吉 半吉 末吉 末小吉 平凶 小凶 半凶 末凶 凶 大凶)
    send_message('omikuji')
    expect(omikuji_list).to include(replies.last)
  end
end

Omikuji 実装

テストにパスするように実装を書く

module Lita
  module Handlers
    class Omikuji < Handler
      route(/omikuji/i, :omikuji) # 正規表現にマッチしたら、指定されたメソッド名を呼び出す

      def omikuji(response)
        omikuji_list = %w(
          大吉 吉 中吉 小吉
          半吉 末吉 末小吉
          平凶 小凶 半凶
          末凶 凶 大凶
        ).freeze
        response.reply(omikuji_list.sample)
      end
    end

    Lita.register_handler(Omikuji)
  end
end

GitHub にプッシュ

実装したので予め作っておいたリポジトリにプッシュ

git push github master

Heroku にデプロイ

  • Procfile の作成

  • redistogo addon の追加

echo "web: bundle exec lita" > Procfile
heroku addons:add redistogo
  • lita_config.rb にRedis to Go の設定を追記
config.redis[:url] = ENV['REDISTOGO_URL']
config.http.port = ENV['PORT']

変更点をコミットしておいて、git でHeroku にプッシュ

heroku create
git push heroku master

動作確認

Slack にアクセスし、lita にomikuji と話しかけると、おみくじを引いてくれる

継続利用

Heroku にデプロイした場合、放置されるとアプリが休眠するらしいので、Uptime などのサービスでアプリの監視をさせる

※ http://my_app_name.herokuapp.com/lita/info にリクエストを投げると(JSON での)応答が返ってくる

Links