IRCにBotを追加していろんな事をする記事はよく見かけますよね。Skypeでそれをやるにはどうすればいいのか、調べてみました。
Sevabotを選んだ理由
Botの開発には、GitHubでも使われているhubotが有名です。hubotにもSkypeアダプタもあるからこれが良さそう、と思い、まずは試してみました。hubotでもSkypeに追加したBotアカウントに対しコマンドを実行させたりするのは簡単です。しかし、例えばチケットを閉じたイベントをあるチャットルームに流そうと思うと、どのチャットルームに流すのか、チャットのIDがわかってないと指定できません。ちょっと調べてみた感じ、そういうインタフェースが見つかりませんでした。スクリプトで調べようと思えば調べられたりしますが、面倒くさいので今回はやめまました。
少し調べてみると、SevabotっていうSkypeにBotアカウントを導入するための良い感じのアプリがありました。こいつにはチャットのIDの一覧があり、またチャットルームを指定してつぶやかせるのも簡単だったので、導入手順をまとめます。
Sevabotとは
SkypeにBotアカウントを導入するためのアプリです。Skype4pyをベースにしています。SevabotにはWebベースの簡易なインタフェースもついています。
Sevabotのベースに利用しているSkype4pyとは、SkypeのPython用のAPIです。起動しているSkypeと通信できるので、Sevabotが受け取ったメッセージをSkype4pyを経由して他のユーザーにメッセージしたり、他のユーザーが入力したコマンドをSkype4pyで受け取ってSevabotが処理を行う、という事ができます。Sevabotが受け取るコマンドも拡張できます。
Sevabotを動かすための制限として下記の2つがあります。
- GUIセッションがいる
- SevabotのためのSkypeアカウントがいる
GUIセッションは、xvfbを使ってやれないこともないです。Sevabotの構築をまとめたwikiでもxvfbを使うようにしていますが、特に問題なければUbuntuのデスクトップ版など、Xがインストールされている環境を用意したほうが楽できるでしょう。
Sevabotのセットアップ
セットアップの流れは下記のとおりです。
- Skypeのインストール
- Sevabotのインストール
- Skypeの起動、アカウント設定
- Sevabotの設定
- Sevabotの起動
今日はUbuntu Desktop 12.04をベースに構築手順をまとめます。
Skypeのインストール
GUIからログインして下記のコマンドを入力
$ sudo dpkg --add-architecture i386
$ sudo add-apt-repository "deb http://archive.canonical.com/ $(lsb_release -sc) partner"
$ sudo apt-get update && sudo apt-get install skype
Sevabotのインストール
Sevabotはpypiにアップロードしているので、pipでインストールすると楽。設定ファイルのサンプルや、基本的なコマンドが導入されているmoduleはGitHubのリポジトリのものをそのまま使ったほうが楽なので、それも取得する
$ sudo apt-get install pip git
$ pip install sevabot
$ git clone https://github.com/opensourcehacker/sevabot.git sevabot
Skypeの起動、アカウント設定
Skypeの設定なので、省略
Sevabotの設定
$ cd sevabot
$ cp settings.py.example settings.py
$ edit settings.py # settings.pyの設定.
settings.pyの設定について
SHARED_SECRET - Webインタフェースのパスワード
ADMINS - botを管理するSkypeアカウント
MODULE_PATH - botのコマンドが格納されているパス。自分で新たにコマンドを作成する場合は、既存のものと見分けをつけやすくするため、別フォルダを作成する。
HTTP_HOST - Webインタフェースでアクセスする場合のホスト名
HTTP_PORT - Webインタフェースのポート名
Sevabotの起動
$ sevabot
コマンドの作り方
簡単。Botはコマンドを受け取ると、UNIXの実行結果である標準出力をSkypeのメッセージに出力する。コマンドは
- Shellスクリプト
- Python, Ruby等など
実行できるものであればなんでもいい。ただし、同名のコマンドがMODULE_PATHに重複しないこと。ビルトインのコマンドであるping等々もこの仕組みで追加されています。例えば自分でコマンドを追加するには下記のとおりに設定します。
- 自作コマンドを置くための custom/ というフォルダを作りましょう。
- customをsettings.pyのMODULE_PATHに追加しましょう。
- 下記のようにcustomフォルダの下にmyscript.shを作成しましょう。
#!/bin/sh
echo "Hello world from my sevabot command"
- chmod u+x myscript.sh として、実行権限をあたえましょう。
- Sevabotがいるチャットルームで, !reload というコマンドを実行して全コマンドをリロードしましょう。
- myscript がコマンド一覧に追加され、 !myscript と入力するとコマンドが実行できるようになるはずです。
なお、上記のスクリプトの実行時にはSKYPE_USERNAME, SKYPE_FULLNAMEという環境変数が追加されます。
Webインタフェースを経由してメッセージを受け取る
同梱されているexamples/send.shを見ると分かる通り、下記の3つのパラメータをURLにpostするとSevabotが受け取ってSkypeに転送します。
URL - http://HTTP_HOST:HTTP_PORT/msg/
msgの後のスラッシュがないと受け付けません。
chat - チャットルームのID
msg - メッセージ本文
md5 - chatとmsgとshared_secretを連結してmd5を計算したもの
これであなたもSkypeでBotライフが楽しめます!是非おためしください。