Ruboty を使ってみた

Ruboty 作者の r7kamura さんのエントリを読んで使ってみました。

r7kamura.hatenablog.com

動かしてみる

gem install ruboty
ruboty --generate
cd ruboty
bundle install

ここまでで Ruboty が動作する状態になります。

bundle exec ruboty を実行することで、シェル上で動作確認ができます。

bundle exec ruboty
Type `exit` or `quit` to end the session.
>

ruboty help を実行すると コマンド一覧が出てくるので、試しに ruboty ping を実行してみます。

> ruboty help
ruboty /help( me)?(?: (?<filter>.+))?\z/i - Show this help message
ruboty /ping\z/i - Return PONG to PING
ruboty /who am i\?/i - Answer who you are
> ruboty ping
pong
>

pong が返ってくることが確認できました。

拡張してみる

以下のように、ruboty hello を実行すると world!!! が返ってくるように拡張してみます。

Type `exit` or `quit` to end the session.
> ruboty hello
world!!!
>

クラスの追加

Ruboty::Handlers::Base を継承したクラスを作ることで拡張していくことができます。

# ruboty/test.rb

module Ruboty
  module Handlers
    class Test < Base
      on(
        /hello/, # トリガー
        name: 'say_world', # 実行するメソッド
        description: 'return "world" to "hello"' # ruboty help で表示される説明文
      )

      # world!!! を返すメソッド
      def say_world(message)
        message.reply('world!!!')
      end
    end
  end
end

動作確認

-l ファイル名 をつけることで指定したファイルを読み込ませることができます。 ruboty help を実行してみると、先ほどのコマンドが追加されていることが確認できます。

bundle exec ruboty -l test.rb
Type `exit` or `quit` to end the session.
> ruboty help
ruboty /hello/ - return "world" to "hello"
ruboty /help( me)?(?: (?<filter>.+))?\z/i - Show this help message
ruboty /ping\z/i - Return PONG to PING
ruboty /who am i\?/i - Answer who you are
>

ruboty hello を実行すると world!!! が返ってきます。

> ruboty hello
world!!!
>