Skypeにはイベント(コンタクトがオンラインになるだとか、ファイル送信のリクエストが飛んできたりだとか)毎に通知を出したり、音声を流したりする機能がある。
この機能の中に、イベントに応じてコマンドを実行する機能がある。また、イベントによっては変数が扱えたりもする。この変数をうまくコマンドに渡してあげると、いろいろ楽しいことができる。
また、Ubuntuにはnotify-osdという(まだ完成度は低いが)オシャレな通知システムがあるので、Rubyのスクリプトを介してnotify-osdに各種イベントの通知を出すようにする。
次のようなスクリプトを用意する。
#!/usr/bin/env ruby require "logger" log = Logger.new(File.expand_path('~/.skype-notify.log')) log.level = Logger::INFO log.progname = 'skype-notify.rb' def notify(summary, body='') system("notify-send -i /usr/share/icons/skype.png '#{summary}' '#{body}'") end begin type, sname, fname, fpath, smessage, fsize, sskype = *ARGV.dup log.debug(ARGV.dup.inspect) case type when "CallRingingIn" notify "Calling!", sname when "ContactOnline" notify "Login: #{sname}" when "ContactOffline" notify "Logout: #{sname}" when "ContactAuthRequest" notify 'Incoming Contact Request', sname when "ChatIncomingInitial" notify "#{sname} started chat", smessage when "TransferRequest" notify "Transfer Request from #{sname}", "#{fname}, [#{fsize}KB]" when "TransferComplete" notify "Transfer Completed!", "#{fname}, [#{fsize}KB]" when "Birthday" notify "Happy Birthday! #{sname}" end rescue Exception => e log.error(e.inspect) end
次にSkypeのOptionsを編集する。
[Options] -> [Notifications] -> [Advanced View] から [Execute the following script on any event] にチェックを入れて、次のように入力する。
ruby $HOME/bin/skype-notify.rb "%type" "%sname" "%fname" "%fpath" "%smessage" "%fsize" "%sskype"
あとは、 [Display pop-up notifications] のチェックをすべて外してよいとおもう。
デバッグについて
log.level = Logger::DEBUG として、Skypeの [Options] -> [Notifications] -> [Test Event] を叩きまくると、 ~/.skype-notify.log にログがたまる。 type の値ごとに when 節を追加していけばよい。まあ、なにはともあれコードを読むほうがはやいとおもう。
はじめてloggerをつかったのだけど、とても便利。いろいろ使ってみるものですね。