Chat with GTalk by Globsy

March 29th, 2008

今週のまとめというか、GLang の Jabber 版で使用した Globsy について書きたいと思います。

Globsy is a PHP bot framework for the Google Talk network…
と書いてありまして、
PHP で GTalk を利用した Bot を作成する為のフレームワーク
ということで、今週の課題(ネタ)にはもってこいでした。

しかし、殆ど情報が無い。
本家にも無い。ネットにも無い。
インストールしても動かない。
サンプルがあっても説明が無い。
結局ソースを読む事に。。。

まあそこは私の性格でこういうものに萌えるわけですよ。たまにw

問題は、

  1. GTalk だけ特別仕様なのか(?)、コネクションとコミュニケーションに使うドメイン名が別。
  2. 重大な(イベントのディスパッチャーが呼ばれない!)バグがあった。

という訳で、パッチを当てた class.jabber.php をダウンロードページにて公開します。

本体は本家からダウンロードして下さい。

重要事項

ScanNetSecurity - セキュリティホール情報<2008/02/22>にあるように、
▽Globsy————————————————————
Globsyは、globsy_edit.phpスクリプトに「/../」を含む細工されたURLリクエストを送ることでディレクトリトラバーサルを実行されるセキュリティホールが存在する。この問題が悪用されると、リモートの攻撃者にシステム上の任意のファイルを閲覧される可能性がある。
2008/02/22 登録

なので、実行に不要な、globsy_cpanel.php と globsy_edit.php はサーバーにアップロードしないで下さい。

使い方

  1. まず、Bot サービス用の GMail アカウントを取得しましょう。
    それを、globsy_config.php の username と password に設定します。
  2. さて、実際のサービスをプログラムする部分ですが、
    globsy_event.php の recv_message() にイベント(受信したコマンド)に対するディスパッチャーを書きます。

    先頭にある、
    if(IsAdmin($from)) {}
    の部分は、管理者が !end や !restart コマンドを送って制御するためのものなので、そのままにします。

    その下の switch() 文を独自のサービス内容に変更するだけです。

    本体(サンプルじゃない方)にあるものがそのまま動くはずです。
    !help とか !hello とか !hello2 とか動きます。

これだけ〜。どうです。すごいですねぇ。
本当はみんな密かに使ってるのかなぁ。。。

Tips

  1. globsy_config.php の admins にコントロール用の GTalk(GMail アカウントを設定しないと、停止、再起動の制御が出来なくなります。(最後の 「,」は必要!
  2. デバック文を表示させたり、ログを吐かせる為には、globsy_main.php の
    $JClient->enable_logging=FALSE;

    $JClient->enable_logging=TRUE;
    に変える。
  3. デバッグ中にうっかり暴走してしまった場合は、http サーバーを停止(再起動)しないといけない。(ので、そういう権限があるサーバーでテストした方がいい。)
  4. globsy_action.php のメインループでは、 SendStatus(”away”… (不在)になっているので、公開する時は好みで “available” (可能)にしてもいい。
  5. 自分のローカルPCで動かす場合は、同時に Chat クライアントを起動するとエラーを起こすので、クライアントはブラウザから GMail.com でテストする。

これで簡単に GTalk Bot が作れるようになりましたw

Tags: , ,

Related Posts:

Leave a Reply