Skypeのチャットに自動応答するJavaScript

前回の続き。

今回もSkype4COMを使って、SkypeをCOMコンポーネントとしてJavaScriptから操作する。Skype4COMのインストールとかは前回やった通りなので省略。

チャットに自動応答

前回は、スクリプトが実行されたタイミングでSkypeのチャットに投稿するようなものを作った。今回は応答、つまり、チャットのメッセージを受信して、それに反応して返事をするようなのをやりたい。

つまりはbotみたいなもの。IRCとかではいくらでもあるけど、Skypeのチャットでこれをやってみたい。JavaScriptで書いてみたい。

簡単に作ってみた

まずは簡単なものを作ってみた。

var skype = new ActiveXObject('Skype4COM.Skype');
WScript.ConnectObject(skype, 'Skype_');
skype.Attach();

while(true){
  WScript.Sleep(1000);
}

function Skype_MessageStatus(msg, status){
  if(status == skype.Convert.TextToChatMessageStatus('RECEIVED')){
    var user = msg.FromDisplayName;
    var body = msg.Body;
    var chat = msg.Chat;
    chat.SendMessage(user + '\n' + body);
  }
}

上記のコードをとりあえず「repeat.js」って名前で保存して、コマンドプロンプトから実行する。あ、実行する前に、Skypeを起動してログイン状態にしておくのを忘れずに。

cscript repeat.js

無限ループさせて待機し、チャットメッセージを受信したら同じ内容をすぐに返信するスクリプト。終了するにはCtrl + C。

コマンドプロンプトからcscriptを使って動かすのがミソ。普通にjsファイルをダブルクリックしちゃうと、wscriptで動いてしまって、終了させるのが面倒になる(タスクマネージャで終了させるとか)。

簡単に、いろんなことをしたい

とりあえず自動応答のやり方はわかった。いろんな自動応答をやりたい。でも、いちいち上記の様なコードを書いて、cscriptで起動させるのは大変。

一本のプログラムだけが走っていて、チャットのメッセージを監視し、条件に合ったメッセージを見つけたら決められたスクリプトを呼び出すようなのを作りたい。

つまり、自動応答のコアになるようなやつ。あとは実際の応答ロジックはプラグイン式に手軽に書く。