LoginSignup
7
8

More than 5 years have passed since last update.

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

Posted at

概要

  • 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 git@github.com: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

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8