Public feed #725831

Something

public text v1 · immutable
Raw Edit
·published 2007-10-04 18:41 UTC
rendered paste body
<?php
/**
 * Ke[n]nY < Endarais >
 * 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<br />\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<br />\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;$i<count($this->events);$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;
			}
		}
		
	}
}
?>