begin process at 2012 02 12 03:57: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é :2 838 / 133

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

CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter
Source avec Zip SIMPLETEMPLATE par thunderhunter
Source avec Zip Source avec une capture VOIR QUI VISITE VOTRE SITE par Dariumis
Source avec Zip CLASS SIMPLE CBASEDONNEE par smag42

 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 administrateur CS

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 administrateur CS

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 Cour sur la programmation oriente objet avec PHP5 [ par adama36 ] Bonjour, Je suis développeur d'application dans une entreprise et je développe avec les langage PHP4/HTML/CSS. Vue l&#8217;évolution du langage PHP qu message d'alerte pour eviter d'enregistrer la meme donner [ par msi079 ] salut . j'ai crée un code php qui marche très bien . mais je voudrai juste qu'elle m'affiche un message d'erreur pour éviter les doublons . par exemp php5 et moteur de template "smarty" [ par smahaneAAI ] Bonjour tout le monde! J'ai eu un projet de la création d'un site web concernant les appelles d'offre, ce projet doit être réalisé en langage php5 et $_server [ par azeiroph ] Bonjour, Je tente actuellement de migrer un applicatif initialement sur php4 vers php5. La migration ce passait bien jusqu'à ce que je tombe sur le 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


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 1,420 sec (3)

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