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();
/**
*
- @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.
}
/**
*
- @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.
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.