Net_SmartIRCを利用したPHPのIRCBOT
SmartIRCライブラリを利用してPHPでIRCBOTをつくってみた.
現在は
IRC.TASYU.COMの#lobbyで動作中です.
現在の仕様
-URLを検出してURLのタイトルを取得・表示
-ローカルユーザーにオペレータ権限を付与
-Botの終了コマンド
検出部分
#URL検出
正規表現を利用してURLにマッチすると次の動作へ
$irc->registerActionhandler(SMARTIRC_TYPE_CHANNEL, '^https?:\/\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$', $bot, 'url');
#bot終了
quitと入力されたら次の処理へ
$irc->registerActionhandler(SMARTIRC_TYPE_CHANNEL, '^quit$', $bot, 'quit');
#なると付与
チャンネルに誰かがきたら次の処理へ
$irc->registerActionhandler(SMARTIRC_TYPE_JOIN, '.*', $bot, 'naruto');
処理部分
#URL検出
リンククッションの時と同じ方法でHTMLを取得後TITLE部抽出
function url(&$irc,&$data){
$url = $data->message;
$urldata = file_get_contents($url);
preg_match_all('@
(.*?)@i', $urldata, $title);
$irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel,mb_convert_encoding($title[2][0],"SJIS", "auto"));
}
#なると付与
ニックネームが自分だったら処理をしない
HOSTを参照してローカルのユーザーだったらオペレーション権限を付与
それ以外の場合は「ごきげんよう」と挨拶するw
function naruto(&$irc,&$data){
if ($data->nick == $irc->_nick)
return;
if(preg_match('/^192\.168\.0\.[0-9]{1,3}$/',$data->host))
$irc->op($data->channel,$data->nick);
$irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel,'ごきげんよう '.$data->nick);
}
#bot終了
ごきげんようと挨拶を残して動作を終了する.
これも誤認識しないようにローカルのユーザーが「quit」と入力した場合だけに限定
function quit(&$irc){
if(preg_match('/^192\.168\.0\.[0-9]{1,3}$/',$data->host))
$irc->quit('ごきげんよう.');
}
参考
Docs For Class Net_SmartIRC_messagehandler