0

skype bot

skypeのbotをlinuxで動かした時のメモです。
作ったのは、botを動かしてコンタクトリストのメンバーのステータスを取得するってやつです。
(諸般の事情で公開してるのはオウム返しするだけのbotです。そのうち公開します。)

以前もmsnのメッセンジャーで同じものを作ったのですが、作り方は全然変わりました。
msnもskypeもプロトコルは非公開ながらmsnのプロトコルはhackされててperlのモジュールなんかも公開されてます。
http://www.bot-depot.com/forum-12.html

skypeはというとプロトコルは非公開ながら外部のソフトウェアからskypeを操作できるAPIが公開されています。

今回使ったのは公式のpython製のskypeAPIのラッパーです。
https://developer.skype.com/wiki/Skype4Py

windowsで使うのは比較的簡単なんだろうけど、コンソール派の人間には慣れない作業がけっこうありました。
msnと違い、まずはlinuxにwindow managerをインストールし、そこにskypeをインストールする必要があります。

window managerはvnc(windowsのリモートデスクトップのようなもの)で動かすのを前提としてるのでGnomeやKDEは辞めXFCEを選択。
はじめて知ったけど超軽量のwindow managerだそうです。
インストールはyumでさくっと。
# yum groupinstall XFCE
VNCも入ってなかったのでVNCもインストール
# yum install vnc-libs.i386
VNCとXFCEを紐づけるためにvncの設定ファイルを少し修正。
# vim /root/.vnc/xstartup
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
# twm &
/usr/bin/startxfce4 &
# startxce4 &

vncを実行
# vncserver
問題なければ下記のようなメッセージが返される。
New 'hoge.com:2 (www)' desktop is hoge.com:2
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/osakarights.com:2.log

このwindowsのosakarights.com:2 (www)をVNCクライアントに入力する。

後はすべてwindowsからVNC越しに作業。

firefoxでhttp://www.skype.com/intl/ja/download/skype/linux/choose/にアクセスしfedora7用のskypeをインストール。
デスクトップは初めてに等しかったので驚いたが、rpmのリンクをクリックするとあれよあれよとインストールが開始され無事終了。

skypeは一世代前のようなインターフェース。

今回はbotとして動いてもらうだけなんでまあいいや。
とりあえず、アカウントを入力してコンタクトリストに何人か登録。
(これもAPIでできる)

skype4pyもインストール
http://sourceforge.net/project/showfiles.php?group_id=202148

これでlinux版skypeをpythonから操作できる準備ができました。
あとはhttp://skype4py.sourceforge.net/doc/html/あたりを参考にごにょごにょ弄ってみる。

サンプルで話しかけられた厭味ったらしくオウム返しするbotを作ってみた。
もちろんこのこのコードもvnc超しのデスクトップのターミナルで実行する必要があります。
# -*- coding: utf-8 -*-
#
# skypeのbotの操作プログラム
# モジュール呼び出し
import Skype4Py
"""
メッセージを送る
"""
def OnMessageStatus(Message, Status):
if Status == 'RECEIVED':
print(Message.FromHandle + ': ' + Message.Body);
s.skype.CreateChatWith(Message.FromHandle).SendMessage(u"( ´,_ゝ`)プッn" + Message.Body + u'だって。')
skype = Skype4Py.Skype()
# Attach to Skype client
skype.Attach()
skype.OnMessageStatus = OnMessageStatus;

このAPIはほとんどのことができます。
ユーザー追加したり、電話したり、チャットしたり、履歴とったり等々。
あとはアイデア次第で、
フィードの更新があったらコンタクトリストのメンバーにメッセージ送ったり
チャットの入力エリアをgoogle検索のインタフェースにしたり
FTPクライアントにしたり等々
できます。