hubot-skypeでskype用BOTを作る

追記 2014/07/05

情報が古くなってきたのでモロモロ修正しました。

追記 2015/12/11

こちらもご覧ください。
skypeでp2p窓を作る自分用メモ - Make 鮫 noise


f:id:saihoooooooo:20130407120312p:plain:w300 

ナウなヤングのBOT制作はhubotでしょ!

という話を最近良く聞くのでhubotを使ってskype用のBOTを作ってみました。

当方の環境は以下になります。

  • OS : OSX 10.8.3
  • Node : 0.8.22
  • python : 2.7.2

こっちが本体。
https://github.com/github/hubot

こっちがskype用のアダプタになります。
https://github.com/netpro2k/hubot-skype

hubot-skypeではAPIラッパーでまともなのがpython製のものしかないのか、一度pythonを中継する流れになっています。
(自分の記憶ではC#とかPHPとかそれこそJavaScriptで操作可能だったような気がしますがそれはまた違うのかな)

図にするとこんな感じか。

f:id:saihoooooooo:20130407012057p:plain:w400

なんかまどろっこしいですね。
あんま複数のソフトフェアが絡むとお互いのバージョンのあれこれで面倒な訳ですが現状これしかないので我慢しましょう。

下下準備

nodeとかnpmとかcoffeeとかその辺のことはスルーで。
どこぞの有用なサイトを御覧ください。

で、前述の通りhubot-skypeにはSkype4Pyが必要なのでインストールしておきます。

$ easy_install Skype4Py

それと当たり前ですが、skypeはインストールしておいてください。
skypeAPIはIDとパスワードをソースに書いておけば勝手にログインしてくれるなどということはありません。
hubotを動かす端末でskypeが起動している必要があります。

適当なアカウントを取っておきましょう。

下準備

それでは早速hubotをインストールしていきます。
インストールはnpmを叩くだけ楽チンちん。

$ npm install -g hubot

gオプションを付けてグローバル領域にインストールしたので、hubotコマンドが使えるようになります。
これでhubot用のディレクトリを作成します。

$ hubot --create hubotskype

その後ディレクトリを移動し、hubot-skypeをインストールしてください。

$ cd hubotskype
$ npm install -S hubot-skype

これで大体準備は完了です。

また、ここでhubotのキモであるhubotスクリプトの話をしておきたいと思います。
hubotスクリプトは以下のいずれかのディレクトリに存在する必要があります。

  • ./scripts
  • ./src/scripts/
  • ./node_module/hubot-scripts/src/scripts (この場合は ./hubot-scripts.json にて使用スクリプトを指定)
  • もしくはコマンド実行時に -r オプションで指定

・・・といってもhubot --createで作ったディレクトリの中には既に./scriptsと./node_module/hubot-scriptsが存在するのでここでは特にやることはありません。
強いて言うなら、redisをインストールしていない方は./hubot-scripts.jsonから"redis-brain.coffee"を削除しておくとよい、ということぐらいでしょうか。

それでは実際にhubotを動かしてみましょう。

実行する

とその前に。
OSXの場合は環境変数を用意する必要があります。
pythonを32bitモードで起動するために VERSIONER_PYTHON_PREFER_32_BIT をtrueにしておきます。

でココらへんを一々exportするのはめんどいのでシェルスクリプトを作っちゃいます。

$ cat << EOF > ./runhubot
#!/bin/sh
export VERSIONER_PYTHON_PREFER_32_BIT=yes

./bin/hubot -a skype
EOF
$ chmod +x ./runhubot

一応説明しますと、-a オプションはアダプタの指定です。
ircのアダプタを使う場合は -a irc 的な。

ではいよいよ実行です。

$ ./runhubot

初回起動時はskypeがアクセスを許可しますかうんたらかんたら、と聞いてきますのでOKしておきましょう。

skypeにメッセージを流すとこんな感じ。

f:id:saihoooooooo:20130407022541p:plain

いい感じですね!

自分のログに反応してるのが一人芝居っぽいですがちゃんとBOTが自動で返してきています。
それぞれ hubot XXXX コマンドに対して結果が返ってきていますね。

作ってみよう

さてさて。
サンプルで用意されているスクリプトも便利ですが、ここはひとつもっとイケてるスクリプトを自分で作ってみましょう。
以下のような感じで。

$ cat << EOF > scripts/imadesho.coffee
# Description:
#   http://cdn-ak.f.st-hatena.com/images/fotolife/s/saihoooooooo/20130407/20130407120312.png
#
# Commands:
#   いつやるの? - 今でしょ!

module.exports = (robot) ->
  robot.hear /いつやるの?/, (msg) ->
    msg.send "今でしょ!"
EOF

簡単ですね。

robot.hearに正規表現を渡すと窓内の発言を全て監視して処理を行います。
robot.respondだとhubot pingのようにロボット名をつけた場合のみ実行されます。
ロボット名はデフォルトでhubotで、起動時の -n オプションにて好きな名前を指定出来ます。

またドキュメントを書いておかないとhubotの実行時にwarning的なメッセージが出るので要注意。

さて、実行。

f:id:saihoooooooo:20130407024445p:plain

キタワァ・・・。
これでいつでも林修先生があなたのそばに・・・。

BOT制作いつやるの?

今でしょ!