HubotでIRC Botをつくる

JAWS-UGなど、最近いろんなところでBotを仕事に使って効率化している話を聞いたので、その界隈では有名なHubotでIRC Botを作ってみます。

hubot


Hubotって何?

Github社が開発・提供しているbot開発・実行のためのフレームワークです。

ちなみに、このエントリでは自分用メモということでまとめてみますが、Hubotのチュートリアル記事は巷にたくさんあります。
勉強するリソースには事欠かないですね!


Hubotのインストール

前提条件として、Node.jsとnpmが必要になりますので、インストールしておきます。
今回はnvmを使ってみました。下記のエントリが詳しいです。

では、早速Hubotをインストールします。

sudo npm install -g hubot coffee-script

Botを作ります。今回はmoobotと名付けました。

hubot --create moobot

では、試しに実行してみましょう。

cd moobot
bin/hubot --name moobot

プロンプトが表示されます。

moobot> 

試しに、moobot help と入力します。

moobot> moobot help
moobot> Events:
debug - {user: <user object to send message to>}
moobot <user> doesn't have <role> role - Removes a role from a user
moobot <user> has <role> role - Assigns a role to a user
moobot <user> is a badass guitarist - assign a role to a user
moobot <user> is not a badass guitarist - remove a role from a user
moobot animate me <query> - The same thing as `image me`, except adds a few parameters to try to return an animated GIF instead.
moobot die - End moobot process
moobot echo <text> - Reply back with <text>
moobot fake event <event> - Triggers the <event> event for debugging reasons
moobot help - Displays all of the help commands that moobot knows about.
moobot help <query> - Displays all help commands that match <query>.
moobot image me <query> - The Original. Queries Google Images for <query> and returns a random top result.
moobot map me <query> - Returns a map view of the area returned by `query`.
moobot mustache me <query> - Searches Google Images for the specified query and mustaches it.
moobot mustache me <url> - Adds a mustache to the specified URL.
moobot ping - Reply with pong
moobot pug bomb N - get N pugs
moobot pug me - Receive a pug
moobot show storage - Display the contents that are persisted in the brain
moobot show users - Display all users that moobot knows about
moobot the rules - Make sure moobot still knows the rules.
moobot time - Reply with current time
moobot translate me <phrase> - Searches for a translation for the <phrase> and then prints that bad boy out.
moobot translate me from <source> into <target> <phrase> - Translates <phrase> from <source> into <target>. Both <source> and <target> are optional
moobot what role does <user> have - Find out what roles are assigned to a specific user
moobot who has admin role - Find out who's an admin and can assign roles
moobot who is <user> - see what roles a user has
moobot youtube me <query> - Searches YouTube for the query and returns the video embed link.
ship it - Display a motivation squirrel

このように、デフォルトではいくつかのコマンドが用意されています。

echo コマンドを実行してみましょう。

moobot> moobot echo Hello Bot!
moobot> Hello Bot!

引数の文字列が出力されました。

こんな感じで使えます。


IRCサーバへの接続

Hubot IRC Adapterを使ってHubotをIRCサーバに接続してみましょう。

作成したIRC Botのディレクトリで下記コマンドを実行します。

npm install hubot-irc --save && npm install

環境変数を設定します。とりあえず必須項目。

export HUBOT_IRC_SERVER="myircserver.com"
export HUBOT_IRC_ROOMS="#test"
export HUBOT_IRC_NICK="moobot"

このBotによる発言はすべてnoticeとするように設定します。

export HUBOT_IRC_SEND_NOTICE_MODE="true"
[/sourecode]

他のBotによる発言はすべて無視するように設定します。

export HUBOT_IRC_IGNORE_USERS="abot,bbot"
[/sourecode]


その他の環境変数の設定が必要な場合は、<a href="https://github.com/nandub/hubot-irc" target="_blank">Hubot IRC Adapter</a>のドキュメントを見て適切に設定します。

では、AdapterにIRCを設定して起動してみましょう。


bin/hubot -a irc --name moobot

起動できました。


foreverによるデーモン化

これまでのステップで起動には成功していますが、実用上はデーモン化すると便利です。
今回は、foreverを使ってデーモン化します。

作成したIRC Botのディレクトリで下記コマンドを実行します。

npm install forever -g

foreverを使ってHubotを起動・停止・再起動するスクリプトを書きます。

#!/bin/bash
BOT_ROOT=/path/to/bot/home
export HUBOT_IRC_SERVER="myircserver.com"
export HUBOT_IRC_ROOMS="#test"
export HUBOT_IRC_NICK="moobot"

case $1 in
  "start" | "stop" | "restart" )
    forever $1 --pidFile $BOT_ROOT/moobot.pid -l $BOT_ROOT/moobot.log -a -v -c /bin/sh $BOT_ROOT/bin/hubot --adapter irc --name moobot
    ;;
  * )
    echo "Usage: moobot.sh {start|stop|restart}"
    ;;
esac

このスクリプトを使って起動するときはこんな感じ。

./moobot.sh start

停止はこんな感じ。

./moobot.sh stop

簡単ですね。

  1. トラックバックはまだありません。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。