IRCbot Consoleは、ブラウザから操作できる多機能なIRCボットです。
下記のような機能を持っています。
メッセージ送信のスクリプトとしてJavaScript(Rhino)を使えるようにしており、他のWEBサービスを組み合わせることによって、さまざまな使い方ができます。
インストールも簡単で、Javaさえ入っていれば、ダウンロードしてきたファイルを解凍し、実行するだけになります。
なお、Tomcatなどのサーブレットコンテナを既に使っている場合には、ダウンロードしたwarファイルをデプロイして使うこともできます。(ダウンロードファイルにはJettyが含まれており、サーブレットコンテナを別途インストールすることなく使えるようにしています)
Javaの実行環境(JRE1.5以上)が必要です。
Javaが実行できる環境であれば、OSは特に関係なく動作すると思います。(Windows XP、Mac OS Xで動作確認済み)
最新バージョンは下記URLより取得できます。
PircBotに依存しているため、PircBotと同じくGNU General Public License v2.0となります。
ダウンロードしたファイル(ircbot_console-X.X.zip)を解凍します。
Windowsの場合はstart.bat、Linuxの場合はstart.shを実行することにより、起動できます。
Tomcatなどのサーブレットコンテナにデプロイして使用する場合には、ircbot.war をサーブレットコンテナにデプロイします。
(Tomcat6では動作確認済み。Servlet API 2.5以上のサーブレットコンテナであれば、動作すると思います。)
下記URLにアクセスし、IRCbot Consoleの画面が表示されれば、起動成功です。(URLは動作させているサーブレットコンテナのポート番号によって異なる場合がありますので、その際には読み替えてください)
Javaの実行環境(JRE1.5以上)が必要となりますので、インストールされていない場合には、インストールしてから実行してください。
起動時に設定内容やログ保存用のディレクトリとして、実行ユーザのホームディレクトリ配下に .ircbot というディレクトリが作成されます。
このディレクトリの作成場所を変えたい場合には、Java実行時の環境変数として ircbot.home に指定します。(-Dircbot.home="ディレクトリ名")
例:startup.bat上で指定した場合
java -Dircbot.home="C:\ircbot" -classpath %IRCBOT_CLASSPATH% JettyRun ircbot.war
IRCサーバへの接続情報を入力し、「接続情報更新」ボタンを押下します。
IRCサーバにパスワードが設定されていない場合、「パスワード」は未入力のままでOKです。
※文字コードは、日本のIRCだと、"UTF-8"ではなく、"ISO-2022-JP"の場合も多いので、ご注意ください。
接続状態が、「接続中」となれば、IRCサーバへの接続が完了です。
JOINするチャンネルを設定します。
チャンネル名を入力し、「追加」ボタンを押下することにより、チャンネルが追加されます。
「設定」のリンクから、チャンネルの各種設定画面へ遷移します。
一定周期でRSSフィードを参照し、新着エントリをメッセージとして送信できます。
「追加」ボタンを押下すると、入力用のフォームが表示されます。
RSSフィード、周期を設定します。
メッセージフォーマットには、JavaScript(Rhino)でスクリプトを書くことができます。(入力無しの場合、デフォルトのフォーマット)
メッセージフォーマットは実行結果がそのままIRCに送信されます。(実行結果がnull、undefinedの場合には、何も送信されません)
タイトル、URLだけを指定する場合には、下記のようになります。
_title + " " + _link
スクリプト上で、下記の変数にアクセスできます。
| _channel | チャンネル名を表す文字列。 |
|---|---|
| _ircBot | IRCボットオブジェクト。下記のクラスのpublicなメソッドを呼び出せます。 |
| _title | RSSエントリのタイトル |
| _link | RSSエントリのリンク(URL) |
| _description | RSSエントリの概要 |
| _updatedDate | RSSエントリの更新日時 |
| _publishedDate | RSSエントリの公開日時 |
決められた周期または時刻に、JavaScript(Rhino)を実行できます。
「追加」ボタンを押下すると、入力用のフォームが表示されます。
一定周期(分)での実行か、時刻指定での実行かを選びます。
スクリプトを入力します。「テスト実行」ボタン押下で、その場で実行することができます。(実行結果はIRCに流れます)
実行結果がそのままIRCに送信されます。(実行結果がnull、undefinedの場合には、何も送信されません)
文字列だけを書いておけば、その文字列がそのままIRCに流れることになります。
"おはようございます。"
スクリプト上で、下記の変数にアクセスできます。
| _channel | チャンネル名を表す文字列。 |
|---|---|
| _ircBot | IRCボットオブジェクト。下記のクラスのpublicなメソッドを呼び出せます。 |
_ircBot を使って、onozatyに対してプライベートメッセージを送るスクリプトは下記のように書きます。
_ircBot.sendMessage( "onozaty", // 送信先(nicknameまたはチャンネル名) "プライベートメッセージです。" // メッセージ );
// チャンネルにJOINしているユーザ一覧を取得 var users = _ircBot.getUsers(_channel); // 乱数を使って、ユーザを1人ピックアップ var todayLeader = users[Math.floor(Math.random() * users.length)]; // メッセージ送信 todayLeader.getNick() + "さんが選ばれました。";
// livedoor Weather Web Service を使用
// (http://weather.livedoor.com/weather_hacks/webservice.html)
var text = readUrl('http://weather.livedoor.com/forecast/webservice/rest/v1?city=63&day=today');
// <?xml version=...?>のパースをサポートしていないので
// https://developer.mozilla.org/ja/E4X
text = text.replace(/^<\?xml\s+version\s*=\s*(["'])[^\1]+\1[^?]*\?>\s*/, "");
// E4Xで参照
var xml = new XML(text);
// タイトルと天気をメッセージとして送信
_ircBot.sendMessage(_channel, xml.title);
_ircBot.sendMessage(_channel, xml.telop);
メッセージがIRCに流れたタイミングで、JavaScript(Rhino)を実行できます。
「追加」ボタンを押下すると、入力用のフォームが表示されます。
スクリプトを入力します。「テスト実行」ボタン押下で、入力ダイアログが表示されます。そこにメッセージを入力することにより、その場で実行することができます。(実行結果はIRCに流れます)
実行結果がそのままIRCに送信されます。(実行結果がnull、undefinedの場合には、何も送信されません)
スクリプト上で、下記の変数にアクセスできます。
| _channel | チャンネル名を表す文字列。 |
|---|---|
| _sender | メッセージの送信者を表す文字列。 |
| _message | 送信メッセージ内容の文字列。 |
| _ircBot | IRCボットオブジェクト。下記のクラスのpublicなメソッドを呼び出せます。 |
メッセージの先頭に"@ircbot" と含まれていた場合、そのメッセージに返信するスクリプトは下記のように書きます。
if (_message.indexOf('@ircbot') == 0) {
// メッセージの先頭に@ircbotが含まれる場合
_ircBot.sendMessage(
_channel,
_sender + 'さんの発言:' + _message
);
}
var prefix = '@ircbot';
if (_message.indexOf(prefix) == 0) {
var command = _message.substr(prefix.length).replace(/(^\s+)|(\s+$)/g, '');
switch(command) {
case '天気':
case '今日の天気':
showWeather('today');
break;
case '明日の天気':
showWeather('tomorrow');
break;
case 'だれ?':
case '誰?':
case 'dare?':
choiceUser();
break;
case '名言':
showMeigen();
break;
}
}
function showWeather(day) {
// livedoor Weather Web Service を使用
// (http://weather.livedoor.com/weather_hacks/webservice.html)
var text = readUrl('http://weather.livedoor.com/forecast/webservice/rest/v1?city=63&day=' + day);
// <?xml version=...?>のパースをサポートしていないので
// https://developer.mozilla.org/ja/E4X
text = text.replace(/^<\?xml\s+version\s*=\s*(["'])[^\1]+\1[^?]*\?>\s*/, "");
// E4Xで参照
var xml = new XML(text);
// タイトルと天気をメッセージとして送信
_ircBot.sendMessage(_channel, xml.title + ' : ' + xml.telop);
}
function choiceUser() {
// チャンネルにJOINしているユーザ一覧を取得
var users = _ircBot.getUsers(_channel);
// 乱数を使って、ユーザを1人ピックアップ
var todayLeader = users[Math.floor(Math.random() * users.length)];
// メッセージ送信
_ircBot.sendMessage(_channel, todayLeader.getNick() + 'さんに決まりました');
}
function showMeigen() {
// 言霊.in を使用
// (http://www.kotodama.in/)
var text = readUrl('http://www.kotodama.in/api/quoteOfDay');
var result = JSON.parse(text);
// 名言を表示
_ircBot.sendMessage(_channel, result.quote + ' by ' + result.author);
}
HTTPリクエストとして、チャンネル名とメッセージを送信することにより、IRCにメッセージを送信できます。
この機能を有効とするためには、トップページのオプションにて、「HTTPリクエストによるメッセージ送信」の「許可する」をチェックします。
URLは下記のようになります。
パラメータとして、channelにチャンネル名、messageに送信メッセージ内容を指定します。(UTF-8でエンコード)
チャンネルが「#test」、メッセージに「こんにちは!」とする際のURLは下記のようになります。
チャンネル情報の「ログ」のリンクから、ログが参照できます。
ver 1.6 (2013/02/02)
ver 1.5 (2013/01/20)
ver 1.4 (2011/10/16)
ver 1.3 (2011/06/11)
ver 1.2 (2010/11/03)
ver 1.0 (2010/04/17)
お問い合わせ、コメント等は下記Blogまたは、Contact からお願いします。