* Trybal Dev Multimedia * nightmare77 at free.fr * * Class principale du bot IRC * * Etablissement d'une connection avec le serveur irc * Traitement de ce que le serveur envoi */ ob_implicit_flush(true); @set_time_limit(0); ignore_user_abort(true); include("irccommands.class.php"); class main { var $socket; var $_nick; var $events; var $message; var $messageex; var $channel; var $nick; var $ident; var $host; /** * Etablissement de la socket de connection */ function connect($server, $port) { $this->socket = fsockopen($server, $port); } /** * Enrengistrement sur le serveur * Mise en place du pseudo */ function login($ident, $mail, $realname, $nick) { fputs($this->socket, "NICK $nick \n"); fputs($this->socket, "USER $ident UNIX $mail :$realname \n") ; $this->nick = $nick; } /** * Lecture de ce qu'envoi le serveur */ function read() { while(TRUE) { $datas = fgets($this->socket); echo str_replace("\n", "\n
\n", $datas); $tempdata = split("\n", $datas); foreach($tempdata as $line) { $this->manageEvents($line); $this->checkEvents($line); } } } /** * Traitement des events recus */ function manageEvents($data) { $tempvar = explode(' ', $data); /** * Ping? Pong! */ if (@$tempvar[0] == "PING") { fputs($this->socket, "PONG " . substr($tempvar[1], 1) . "\n"); echo "PONG :" . substr($tempvar[1], 1) . "\n
\n" ; } /** * Raw 433: nick deja utilise * On change le nick par le nick deja set, avec un nombre au hasard derriere */ if (@$tempvar[1] == "433") { $this->_nick = $this->_nick . rand(0, 999); fputs($this->socket, "NICK ".$this->_nick." \n"); } } /** * Enrengistrement d'un evenement */ function registerEvents($type, $regex, $fonction) { $this->events[] = array('type' => $type, 'regex' => $regex, 'fonction' => $fonction); } /** * Definition des types d'evenement possible */ function defineType($data) { $tempvar = explode(' ', $data); if ($tempvar[1] == 'PRIVMSG' && substr($tempvar[2],0,1) == '#') { return 'CHANNEL'; } elseif ($tempvar[1] == 'PRIVMSG' && substr($tempvar[2],0,1) != '#') { return 'QUERY'; } elseif ($tempvar[1] == 'NOTICE') { return 'NOTICE'; } elseif ($tempvar[1] == 'JOIN') { return 'JOIN'; } elseif ($tempvar[1] == 'PART') { return 'PART'; } elseif ($tempvar[1] == 'QUIT') { return 'QUIT'; } // etc... } /** * Vérification si l'evenement a été défini et si oui, execution de la fonction de cette evenement */ function checkEvents($data) { $message = explode(":", $data); $tempvar = explode(' ', $data); $this->message = @$message[2]; $this->messageex = explode(" ", $this->message); $this->channel = @$tempvar[2]; preg_match("/:([a-z0-9\[\]\\\|`_-]{4,})!([a-z0-9~_-]{4,})@([a-z0-9\.-]{4,})/is", $data, $details); $this->nick = @$details[1]; $this->ident = @$details[2]; $this->host = @$details[3]; for($i=0;$ievents);$i++) { if($this->defineType($data) == $this->events[$i]['type'] && preg_match('/'.$this->events[$i]['regex'].'/',$this->message)) { $temp = $this->events[$i]['fonction']; $doEvent = new bot(); $fonction = '$doEvent->'.$temp.'();'; eval($fonction); break; } } } } ?>