Bot irc poo

Description

Salut a tous,

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

Source / Exemple :


<?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.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.