begin process at 2010 03 21 06:01:13
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > BOT IRC POO

BOT IRC POO


 Information sur la source

Note :
Aucune note
Catégorie :Class et Objet ( POO ) Classé sous :Bot, irc, objet, php5, configurable Niveau :Initié Date de création :26/01/2009 Date de mise à jour :26/01/2009 23:25:16 Vu / téléchargé :1 823 / 100

Auteur : divx78

Ecrire un message privé
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Salut a tous,

Voici une classe pour un bot irc facilement configurable.
Lancement comme un deamon.
Je vous laisse découvrir ces fonctions.

Source

  • <?php
  • //Hum c'est moche !
  • define('ENTER', "\n");
  • class feignat_bot
  • {
  • /*
  • Adresses
  • IRC + sont port !
  • */
  • private $conf = array(
  • 'host' => 'chat.freenode.net',
  • 'port' => 6666);
  • /*
  • file d'envoi de commande.
  • Permet de recuperer des info specials
  • Les ecrit dans le fichier cmd.txt
  • Si fichier existe pas creation auto.
  • */
  • private $file = array(
  • 'name' => 'cmd.txt',
  • 'date' => '0'
  • );
  • /*
  • Identifications
  • Configuration du chanel IRC
  • */
  • private $info = array(
  • 'user' => "feignant UNIX feignent@epitech.eu PHP_BOT",
  • 'nick' => "####login###",
  • 'join' => "#chan#",
  • 'first_msg' => "#chan# Salut !",
  • 'prompt' => '###login###/>>'
  • );
  • /*
  • Dico v2 fo fun
  • Referencer les reponce de votre bot
  • exemple :
  • salut => le bot retourn => Salut !
  • respecter l'ordre de l'array.
  • Nouveau deco pour la v2 !
  • */
  • private $dico_last = array(
  • 0 => array('salut', 'Salut !'),
  • 1 => array('sa va ?', 'et toi ?'),
  • 2 => array('bot', 'Moi un bot jamais !')
  • .............
  • );
  • //Commande externe
  • private $externCmd = array();
  • /**
  • * Constructeur
  • *
  • * @param TRUE/FALSE $proxy
  • * @param info proxy $info_proxy
  • */
  • public function __construct($what, $proxy, $info_proxy)
  • {
  • if($what == 'bot')
  • $this->bot($proxy, $info_proxy);
  • else if ($what == 'client')
  • $this->client($proxy, $info_proxy);
  • }
  • private function client($proxy, $info_proxy)
  • {
  • //en cour de developpement.
  • }
  • /**
  • * Bot IRC
  • *
  • * @param unknown_type $proxy
  • * @param unknown_type $info_proxy
  • */
  • private function bot($proxy, $info_proxy)
  • {
  • //valeur de set time a 0
  • set_time_limit(0);
  • //Initialisation du Proxy !
  • if($proxy)
  • {
  • echo "Connexion au proxy: ".$info_proxy[0].":".$info_proxy[1].ENTER;
  • $socket = fsockopen($info_proxy[0], $info_proxy[1]) or die('Impossible !');
  • $url = 'http://'.$info_proxy[2].':'.$info_proxy[3].'@'.$info_proxy[0].':'.$info_proxy[1];
  • fputs($socket, $url);
  • }
  • $socket = $this->init_socket();
  • //envoi des information pour le login
  • $this->put_manual_cmd($socket, 'user '.$this->info['user'].ENTER);
  • $this->put_manual_cmd($socket, 'nick '.$this->info['nick'].ENTER);
  • $this->put_manual_cmd($socket, 'join '.$this->info['join'].ENTER);
  • $this->put_manual_cmd($socket, 'privmsg '.$this->info['first_msg'].ENTER);
  • //recupe des info
  • $this->get_chan($socket);
  • }
  • /**
  • * Recuper l'entre standard
  • *Encours pour la V2 !
  • */
  • private function get_prompt()
  • {
  • while(42)
  • {
  • $req = fgetc(STDIN);
  • echo $req;
  • }
  • }
  • /**
  • * Envoi des requetes sur le chan
  • * PROTOTYPE pas encore dev...
  • * En cours pour la v2 !
  • *
  • * @param unknown_type $socket
  • */
  • private function put_manual_cmd($socket, $elem_put)
  • {
  • if(is_array($elem_put))
  • {
  • $i = 0;
  • while($i < sizeof($elem_put))
  • {
  • echo 'envoi: '.$elem_put[$i]."\n";
  • if(!fputs($socket, $elem_put[$i]))
  • echo 'Impossible !';
  • $i++;
  • }
  • }
  • else
  • {
  • if(!fputs($socket, $elem_put))
  • echo 'Impossible !';
  • }
  • }
  • /**
  • * Recupere les info sur le chan en temp reel
  • *
  • * @param unknown_type $socket
  • */
  • private function get_chan($socket)
  • {
  • while(42)
  • {
  • $info = fgets($socket);
  • if($mot = $this->parse_info($socket, $info))
  • $this->put_manual_cmd($socket, "PRIVMSG ".$this->info['join']." :".$mot.ENTER);
  • echo $this->info['prompt'].$info;
  • }
  • }
  • /**
  • * Parse les infos
  • * Pour des reponces du bot
  • *
  • * @param unknown_type $info
  • */
  • private function parse_info($socket, $info)
  • {
  • $i = 0;
  • while($i < sizeof($this->dico_last))
  • {
  • if(preg_match('/PING/', $info))
  • {
  • $info = str_replace('PING', 'PONG', $info);
  • $this->put_manual_cmd($socket, $info.ENTER);
  • }
  • else if(preg_match('/allstar/', $info))
  • {
  • $fd = fopen($this->file['name'], 'a+');
  • $array = explode(" ", $info);
  • for($o=4;$o < sizeof($array);$o++)
  • fputs($fd, $array[$o]);
  • fclose($fd);
  • return 'coupon: (allstar) '.md5('NOOBY !');
  • }
  • else if(preg_match('/'.$this->dico_last[$i][0].'/', $info))
  • return $this->dico_last[$i][1];
  • $i++;
  • }
  • }
  • /**
  • * Fonction d' initialisations des sockets
  • * Prise en compte IRC
  • * Mode TCP
  • *
  • * @return False en cas d echec
  • */
  • private function init_socket()
  • {
  • echo 'Connexion a '.$this->conf['host'].'...'.ENTER;
  • if(!$socket = fsockopen($this->conf['host'], $this->conf['port']))
  • {
  • echo 'Impossible d ouvrir le socket';
  • return FALSE;
  • }
  • else
  • return $socket;
  • }
  • public function __destruct()
  • {
  • return TRUE;
  • }
  • }
  • /*
  • Information proxy
  • Vous permet de configurer un proxy.
  • */
  • $proxy = array(
  • 'xxxxxxxx',
  • xxxx,
  • 'xxxxxx',
  • 'xxxxxx'
  • );
  • //Objet le bot.
  • $a = new feignat_bot('bot', FALSE, $proxy);
  • ?>
<?php
//Hum c'est moche !
define('ENTER', "\n");

class feignat_bot
{
	/*
	Adresses
	 IRC + sont port !
	*/
	private $conf = array(
		'host'  => 'chat.freenode.net',
		'port'  =>  6666);
	
	/*
	file d'envoi de commande.
	Permet de recuperer des info specials
	Les ecrit dans le fichier cmd.txt
	Si fichier existe pas creation auto.
	*/
	private $file = array(
		'name' => 'cmd.txt',
		'date' => '0'
		);
		
	/*
	Identifications
	Configuration du chanel IRC
	*/
	private $info = array(
		'user' 		=> "feignant UNIX feignent@epitech.eu PHP_BOT",
		'nick' 		=> "####login###",
		'join' 		=> "#chan#",
		'first_msg' => "#chan# Salut !",
		'prompt' 	=> '###login###/>>'
		);
		
	/*
	Dico v2 fo fun
	Referencer les reponce de votre bot
	exemple :
	  salut => le bot retourn => Salut !
	  respecter l'ordre de l'array.
	Nouveau deco pour la v2 !
	*/
	private $dico_last = array(
		0 => array('salut', 'Salut !'),
		1 => array('sa va ?', 'et toi ?'),
		2 => array('bot', 'Moi un bot jamais !')
	.............
	);
	
	//Commande externe
	private $externCmd = array();
		
/**
 * Constructeur
 *
 * @param TRUE/FALSE $proxy
 * @param info proxy $info_proxy
 */
	public function __construct($what, $proxy, $info_proxy)
	{
		if($what == 'bot')
			$this->bot($proxy, $info_proxy);
		else if ($what == 'client')
			$this->client($proxy, $info_proxy);
	}
	
	private function client($proxy, $info_proxy)
	{
		//en cour de developpement.
	}
	
	/**
	 * Bot IRC
	 *
	 * @param unknown_type $proxy
	 * @param unknown_type $info_proxy
	 */
	private function bot($proxy, $info_proxy)
	{
		//valeur de set time a 0
		set_time_limit(0);
		
		//Initialisation du Proxy !
		if($proxy)
		{
			echo "Connexion au proxy: ".$info_proxy[0].":".$info_proxy[1].ENTER;
			$socket = fsockopen($info_proxy[0], $info_proxy[1]) or die('Impossible !');
			$url = 'http://'.$info_proxy[2].':'.$info_proxy[3].'@'.$info_proxy[0].':'.$info_proxy[1];
			fputs($socket, $url);
		}
		
		$socket = $this->init_socket();
		
		//envoi des information pour le login
		$this->put_manual_cmd($socket, 'user '.$this->info['user'].ENTER);
		$this->put_manual_cmd($socket, 'nick '.$this->info['nick'].ENTER);
		$this->put_manual_cmd($socket, 'join '.$this->info['join'].ENTER);
		$this->put_manual_cmd($socket, 'privmsg '.$this->info['first_msg'].ENTER);
		
		//recupe des info
		$this->get_chan($socket);
	}
	
	/**
	 * Recuper l'entre standard
	 *Encours pour la V2 !
	 */
	private function get_prompt()
	{
		while(42)
		{
			$req = fgetc(STDIN);
			echo $req;
		}
	}
	
	/**
	 * Envoi des requetes sur le chan
	 * PROTOTYPE pas encore dev...
	 * En cours pour la v2 !
	 *
	 * @param unknown_type $socket
	 */
	private function put_manual_cmd($socket, $elem_put)
	{
		if(is_array($elem_put))
		{
			$i = 0;
			while($i < sizeof($elem_put))
			{
				echo 'envoi: '.$elem_put[$i]."\n";
				if(!fputs($socket, $elem_put[$i]))
					echo 'Impossible !';
				$i++;
			}
		}
		else
		{
			if(!fputs($socket, $elem_put))
				echo 'Impossible !';
		}
	}
	
	/**
	 * Recupere les info sur le chan en temp reel
	 *
	 * @param unknown_type $socket
	 */
	private function get_chan($socket)
	{
		while(42)
		{			
			$info = fgets($socket);
			if($mot = $this->parse_info($socket, $info))
				$this->put_manual_cmd($socket, "PRIVMSG ".$this->info['join']." :".$mot.ENTER);
			echo $this->info['prompt'].$info;
		}
	}
	
	
	/**
	 * Parse les infos
	 * Pour des reponces du bot
	 *
	 * @param unknown_type $info
	 */
	private function parse_info($socket, $info)
	{
		$i = 0;
		while($i < sizeof($this->dico_last))
		{
			if(preg_match('/PING/', $info))
			{
				$info = str_replace('PING', 'PONG', $info);
				$this->put_manual_cmd($socket, $info.ENTER);
			}
			else if(preg_match('/allstar/', $info))
			{
				$fd = fopen($this->file['name'], 'a+');
				$array = explode(" ", $info);
				for($o=4;$o < sizeof($array);$o++)
					fputs($fd, $array[$o]);
				fclose($fd);
				return 'coupon: (allstar) '.md5('NOOBY !');
			}
			else if(preg_match('/'.$this->dico_last[$i][0].'/', $info))
				return $this->dico_last[$i][1];
		$i++;
		}
	}
	
	/**
	 * Fonction d' initialisations des sockets
	 * Prise en compte IRC
	 * Mode TCP
	 *
	 * @return False en cas d echec
	 */
	private function init_socket()
	{
		echo 'Connexion a '.$this->conf['host'].'...'.ENTER;
		if(!$socket = fsockopen($this->conf['host'], $this->conf['port']))
		{
		 	echo 'Impossible d ouvrir le socket';
			return FALSE;
		}
		else
			return $socket;
	}
	
	public function __destruct()
	{
		return TRUE;
	}
}
/*
Information proxy
Vous permet de configurer un proxy.
*/
$proxy = array(
	'xxxxxxxx',
	 xxxx,
	 'xxxxxx',
	 'xxxxxx'
);
//Objet le bot.
$a = new feignat_bot('bot', FALSE, $proxy);
?>

 Conclusion

Je vous laisse critiquer une V2 est en cour :)
Merci a vous.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

26 janvier 2009 19:20:50 :
un code perso...
26 janvier 2009 23:25:17 :
bug..

 Sources de la même categorie

Source avec Zip CLASSE TABLE HTML DYNAMIQUE par LDDL
Source avec Zip GÉNÉRATEUR DE COUCHE DAO POUR SITE WEB À PARTIR D'UNE BASE D... par alexfool
Source avec Zip [PHP5.2] CLASSE PDO par hornetbzz
Source avec Zip POO - LOGGING PACKAGE par Waredan
POO - OBJECT CLASS par Waredan

 Sources en rapport avec celle ci

Source avec Zip PHP5 MY EXPLORER : AFFICHE L'ARBORESCENCE DE DOSSIERS par ranouf
[PHP5] LIVE COUNTER || QUI EST EN LIGNE par Teclis01
BOT IRC : GÉNÉRATEURS DE LOGS AU FORMAT MIRC par simonviei
CLASS DE PAGINATION par NainPuissant
Source avec Zip RPG POUR IRC par Arto_8000

Commentaires et avis

Commentaire de coucou747 le 26/01/2009 21:52:03

salut

a la place de ceci :
#  echo 'Impossible d ouvrir le socket';
# return FALSE;

pourquoi ne pas utiliser d'exceptions ?

Commentaire de divx78 le 26/01/2009 22:26:04

oui c'est vrai avec un try sa serai plus propre j'en prend note.

Commentaire de divx78 le 29/01/2009 19:02:22

des avies ???

Commentaire de coucou747 le 29/01/2009 19:23:43

si :

if(preg_match('/PING/', $info))

ici, tu verifies si ca contient PING, donc si t'as un :

truc:machin PRIVMSG #truc bidule PING PONG

tu vas mal reagir.

Commentaire de ryosama le 02/02/2009 09:01:28

Héhéhé, il traine un petit "while(42)" au milieu du code. C'est toujours marrant de voir ce genre de clin d'oeil.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

aide en php5 [ par RachDevelop ] bonjour un tous je débute en php objet , si quelcun peut me m'aider avec un tutorial ou des conseils , car j'ai pas une grande vision objet et je rame Projet de bot irc [ par emilrom ] Bonjour, Je cherche un bon codeur en tcl, C, php, python dans le but de cr&#233;e un bot irc qui doit, par l'interm&#233;diaire de socket, g&#233;rer objet php5 surdéfinition de fonctions [ par poiuytrez3 ] Bonjour, j'ai crée un objet php5 avec plusieurs membres privés. J'ai donc crée une fonction function __get($attribut){ return $this->attribut; } e Utilisation d'une méthode avec pour parametre un objet [ par aguiran ] Salut, Mon pb ressemble un peu &#224; celui pos&#233; par Mandark le 11/02, mais je ne souhaite pour ma part, pas r&#233;-instancier un objet dans da warning sous php5 [ par junior300 ] &nbsp;Bonjourj'ai creer une application avec php5lorsque je lance mon application plusieur warning sont afficherje voudrais les supprimer car je g&#23 Parser une chaîne [ par thomvaill ] Bonjour &#224; tous, Je vous explique ma question, je re&#231;ois d'un serveur IRC (par un socket) de temps en temps une cha&#238;ne (pas &#224; chaqu Objet COM [ par raven44 ] Bonjour &#224; tous, J'instancie un objet COM ('word.application') afin de r&#233;cup&#233;rer un document word au format texte, ce que j'arrive &#224 Tableau d'objet [ par Galmiza ] Salut,Est-il possible de cr&#233;er un tableau d'objets ?$tab_membres = array(new Membre("nom1", "pr&#233;nom1"),new Membre("nom2", "pr&#233;nom2"),.. Jointure entre 2 tables mysql [ par dj-smoye ] Bonjour tlm,   Voilà j'ai un soucis avec la requête ci-dessous: SELECT    D1.id_users  AS User1_Id,    D1.num_obj   AS User1_ObjectId,   D2.id_u php5 [ par programmationniste ] j'ai téléchargé des codes pour commencer avec php, mais mon IE ne m'affiche pas les fichier dont l'extension est php5, il me propose de les télécharge


Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,655 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales