Accueil > > > BOT IRC POO
BOT IRC POO
Information sur la source
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
- <?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.
Historique
- 26 janvier 2009 19:20:50 :
- un code perso...
- 26 janvier 2009 23:25:17 :
- bug..
Sources de la même categorie
Commentaires et avis
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ée un bot irc qui doit, par l'intermédiaire de socket, gé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 à celui posé par Mandark le 11/02, mais je ne souhaite pour ma part, pas ré-instancier un objet dans da
warning sous php5 [ par junior300 ]
Bonjourj'ai creer une application avec php5lorsque je lance mon application plusieur warning sont afficherje voudrais les supprimer car je g
Parser une chaîne [ par thomvaill ]
Bonjour à tous, Je vous explique ma question, je reçois d'un serveur IRC (par un socket) de temps en temps une chaîne (pas à chaqu
Objet COM [ par raven44 ]
Bonjour à tous, J'instancie un objet COM ('word.application') afin de récupérer un document word au format texte, ce que j'arrive à
Tableau d'objet [ par Galmiza ]
Salut,Est-il possible de créer un tableau d'objets ?$tab_membres = array(new Membre("nom1", "prénom1"),new Membre("nom2", "pré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
|
Derniers Blogs
L'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIESL'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIES par odewit
La tendance est aux interfaces naturelles (NUI), et le keynote de Bill Buxton au MIX l'a bien souligné.
La charte graphique et ergonomique de Windows Phone 7 a donc été entièrement repensée en vue d'obtenir un maximum d'efficacité sur ce point. En re...
Cliquez pour lire la suite de l'article par odewit COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE?COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE? par Matthieu MEZIL
Avec EF, les vues doivent être mappées sur des entity types. Le problème c'est que les entity types doivent avoir une clé. Avec EF, nous avons les complex type qui n'ont pas de clé mais les vues ne peuvent pas être mappées dessus. Avec EF4, il est possibl...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL?[WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL? par JeremyJeanson
Certain d'entre vous on peut être vécu cette situation embarrassante après quelques temps passer avec WF4 : Au début avec mon " ActivityDesigner" , tout allait bien. Et puis un jour j'ai au des problèmes de " Binding" . Alors nous sommes allé sur le site ...
Cliquez pour lire la suite de l'article par JeremyJeanson
Forum
MYSQL PROBLEMEMYSQL PROBLEME par remitete
Cliquez pour lire la suite par remitete
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
Comparez les prix

HTC Hero
Entre 550€ et 550€
|