IRCbot Console

IRCbot Consoleは、ブラウザから操作できる多機能なIRCボットです。

下記のような機能を持っています。

  • 各種設定を全てブラウザ上から操作可能
  • RSSの新着エントリをIRCにメッセージとして送信
  • 一定周期や決まった時間にIRCにメッセージを送信
  • IRC上の発言に対してメッセージを返信
  • HTTPリクエストを受け付けて、IRCにメッセージを送信(HIP (HTTP IRC Proxy)と同等機能)
  • ログを収集し、ブラウザ上で参照可能

メッセージ送信のスクリプトとして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サーバへの接続情報を入力し、「接続情報更新」ボタンを押下します。

IRCサーバにパスワードが設定されていない場合、「パスワード」は未入力のままでOKです。

※文字コードは、日本のIRCだと、"UTF-8"ではなく、"ISO-2022-JP"の場合も多いので、ご注意ください。

接続情報設定

接続状態が、「接続中」となれば、IRCサーバへの接続が完了です。

チャンネルの設定

JOINするチャンネルを設定します。

チャンネル名を入力し、「追加」ボタンを押下することにより、チャンネルが追加されます。

チャンネル追加

「設定」のリンクから、チャンネルの各種設定画面へ遷移します。

チャンネル設定

RSS通知

一定周期でRSSフィードを参照し、新着エントリをメッセージとして送信できます。

「追加」ボタンを押下すると、入力用のフォームが表示されます。

RSS

RSSフィード、周期を設定します。

メッセージフォーマットには、JavaScript(Rhino)でスクリプトを書くことができます。(入力無しの場合、デフォルトのフォーマット)

RSS設定

メッセージフォーマットは実行結果がそのままIRCに送信されます。(実行結果がnull、undefinedの場合には、何も送信されません)

タイトル、URLだけを指定する場合には、下記のようになります。

_title + " " + _link

RSSメッセージ

スクリプト上で、下記の変数にアクセスできます。

_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またはチャンネル名)
  "プライベートメッセージです。" // メッセージ
);

サンプル1:JOINしているユーザからランダムに一人を選んでその結果を送信

// チャンネルにJOINしているユーザ一覧を取得
var users = _ircBot.getUsers(_channel);

// 乱数を使って、ユーザを1人ピックアップ
var todayLeader = users[Math.floor(Math.random() * users.length)];

// メッセージ送信
todayLeader.getNick() + "さんが選ばれました。";

サンプル2:WEBサービスから取得した情報を送信(Livedoor天気情報)

// 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
  );
}

サンプル1:天気予報、名言を返却する(XML、JSON形式のWEBサービス使用)

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リクエストによるメッセージ送信

HTTPリクエストとして、チャンネル名とメッセージを送信することにより、IRCにメッセージを送信できます。

この機能を有効とするためには、トップページのオプションにて、「HTTPリクエストによるメッセージ送信」の「許可する」をチェックします。

HTTPリクエストによるメッセージ送信

URLは下記のようになります。

パラメータとして、channelにチャンネル名、messageに送信メッセージ内容を指定します。(UTF-8でエンコード)

チャンネルが「#test」、メッセージに「こんにちは!」とする際のURLは下記のようになります。

ログの参照

チャンネル情報の「ログ」のリンクから、ログが参照できます。

ログ

ログ


変更履歴

ver 1.6 (2013/02/02)

  • チャンネル名の大文字小文字を同一に扱うよう変更

ver 1.5 (2013/01/20)

  • Apache HttpComponentsのjarファイルを追加

ver 1.4 (2011/10/16)

  • チャンネルに対するパスワードに対応

ver 1.3 (2011/06/11)

  • RSS通知でのBASIC認証対応
  • RSS通知にてSSL証明書の認証スキップ(不正な証明書でもOKとする)

ver 1.2 (2010/11/03)

  • RSS通知の周期およびフォーマット設定機能追加

ver 1.0 (2010/04/17)

  • 初回公開。


その他

お問い合わせ、コメント等は下記Blogまたは、Contact からお願いします。