hubot-skypeでskype用BOTを作る
追記 2014/07/05
情報が古くなってきたのでモロモロ修正しました。
追記 2015/12/11
こちらもご覧ください。
skypeでp2p窓を作る自分用メモ - Make 鮫 noise
という話を最近良く聞くのでhubotを使ってskype用のBOTを作ってみました。
当方の環境は以下になります。
こっちが本体。
https://github.com/github/hubot
こっちがskype用のアダプタになります。
https://github.com/netpro2k/hubot-skype
hubot-skypeではAPIラッパーでまともなのがpython製のものしかないのか、一度pythonを中継する流れになっています。
(自分の記憶ではC#とかPHPとかそれこそJavaScriptで操作可能だったような気がしますがそれはまた違うのかな)
図にするとこんな感じか。
なんかまどろっこしいですね。
あんま複数のソフトフェアが絡むとお互いのバージョンのあれこれで面倒な訳ですが現状これしかないので我慢しましょう。
下下準備
nodeとかnpmとかcoffeeとかその辺のことはスルーで。
どこぞの有用なサイトを御覧ください。
で、前述の通りhubot-skypeにはSkype4Pyが必要なのでインストールしておきます。
$ easy_install Skype4Py
それと当たり前ですが、skypeはインストールしておいてください。
skypeのAPIは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にメッセージを流すとこんな感じ。
いい感じですね!
自分のログに反応してるのが一人芝居っぽいですがちゃんと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的なメッセージが出るので要注意。
さて、実行。
キタワァ・・・。
これでいつでも林修先生があなたのそばに・・・。
BOT制作いつやるの?