【Ubuntu】Ruby で Skype bot を作る

前回(0から Linux に Ruby を導入する - seconの日記)で Ubuntu 上での Ruby 環境を構築したので、今回はそれを活かして Skype bot を作ってみる。
もとい Skype bot を作るために環境を整えたのだけどね。
今回は、特定の単語に反応する bot を作っていく。


今回やること

Skype のインストール

bot 用のアカウントは既に作ってある前提で進めるので、無い場合は作っておく。
Skypeのインストールは Ubuntu 上で行う。
http://www.skype.com/ja/
ページ下部にある Skype のダウンロード → Linux を選択。ディストリビューションUbuntu 12.04 (multiarch)を選び、ダウンロードが始まったら保存する。

ダウンロードが完了したらターミナルを開き、次のコマンドを入力。

$ skype

スカイプが開いたらOK。

エディタのインストール

最初からインストールされているテキストエディタ(gedit)でもよいのだけれど、折角なので別のものをインストールしてみる。
という訳で Sublime Text 2 をインストールする。他に使いたいものがあればそちらをインストールすると良い。

$ sudo add-apt-repository ppa:webupd8team/sublime-text-2
$ sudo apt-get update
$ sudo apt-get install sublime-text

これでインストール完了。起動するときはこう。

$ sublime-text

Launcher に登録しておくと便利かもしれない。


このままだと日本語が入力できないので、さらにパッケージをインストール。

$ cd ~/.config/sublime-text-2/Packages
$ git clone https://github.com/xgenvn/InputHelper.git

こうすることで、[Ctrl + Shift + Z] で日本語入力用のウィンドウが立ちあがる。

Skype bot の作成

やっと環境が整った、といいたいところだけどその前に gem をインストール。

$ gem install skype ruby-dbus

とりあえずこれでOK。

それと、
/home/secon/src/ruby/skypebot
のようにスクリプトファイルを保存する用のディレクトリを先に作っておく。


では、 Skype bot 用のスクリプトファイルを作っていく。

require 'rubygems'
require 'skype'

Skype.config :app_name => "my_skype_app"    # bot のユーザー名

hearing_threshold = 10
last_id = 0
last_time = Time.now.to_i                  

loop do
  Skype.chats.each do |chat|
    chat.messages.each do |m|
      next unless last_id < m.id
      last_time = m.time.to_i
      
      next unless Time.now.to_i - last_time < hearing_threshold  
                                            # 過去ログの発言に反応するのを防止
      chat.post "pong" if m.body.include? "ping"
      last_id = m.id
    end
  end
  sleep 1
end



Ruby ファイルとして skypebot ディレクトリに保存し、実行してみる。
bot の名前は alice にした。
alice さんは「ping」と打つと「pong」と返してくれる。

f:id:secon:20140207211416p:plain


もちろん複数の言葉に反応することも可能。

f:id:secon:20140207211411p:plain

グヘヘ。

対応する言葉さえ作ってしまえば言わせたい放題である。プロフィール画像をかわいい女の子にしてしまえばもう完璧。


組み合わせは無限大、自分だけの bot を作ってみてはいかがだろうか。