* 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;
}
}
}
}
?>