paranoidandroid | Bonjour,
J'ai adapté un script de bot IRC en php pour lui faire faire une simple tache -> Récuperer la liste des nick connectés sur un channel donné.
Le seul probleme c'est qu'actuellement pour récuperer la liste via un NAMES #chan, je dois d'abord faire rentrer le bot sur le chan donné étant que le serveur irc sur lequel je le connecte ( qnet en l'occurence ) applique le mode invisible par défaut.
L'idée foireuse que j'ai eu au début c'est d'éxec le script a chaque visite de la page "whoisonlineirc.php" par exemple. Mais ça fait une multitude de join/part sur le chan IRC. Ensuite de passer via MySQL et des restriction au niveau de script pour qu'il soit executé qu'une fois par heure par exemple. Mais le join/part me dérange toujours quelquepart.
Savez vous s'il y a un autre moyen de récuperer la liste des users ?
Je mets le bout de code juste pour info :
Code :
- <?php
- $strServeur = "euroserv.fr.quakenet.org"; // serveur IRC
- $intPort = 6667; // port..
- $strNickCMD = "NICK udontseeme"; // pas tout a fait vrai.
- $strNick = ":udontseeme";
- $strInfo = 'USER Android2006 0 * :bot';
- $strChannel = "JOIN #kefas"; // votre channel IRC
- $strNames = "NAMES #kefas"; // liste utilisateurs
- function send_data ($message) {
- fputs (SOCKET, "$message\r\n", 4096);
- }
- function read_ping ($in) {
- if (strpos ($in, 'PING :') !== FALSE ) {
- send_data ('PONG '.substr ($in, 6));
- }
- }
- function read_data ($data) {
- $in = fgets ($data, 4096);
- read_ping ($in);
- return $in;
- }
- $open_socket = @fsockopen($strServeur, $intPort); // ouverture socket sur le serveur
- if (feof ($open_socket))
- {
- die ("Couldn't connect to IRC" );
- }
- else
- {
- define ('SOCKET', $open_socket);
- send_data ($strInfo);
- send_data ($strNickCMD);
- $i = 0;
- while (SOCKET)
- {
- if ($i++ == 5)
- {
- send_data ($strChannel);
- send_data ($strNames);
- }
- $in = read_data(SOCKET);
- if(strstr($in, "353" ))
- { // on détecte si c'est la réponse à notre cmd NAMES
- $temp = substr(strstr($in, $strNick),strlen($strNick));
- $temp = explode(" ", trim($temp));
- print_r ($temp);
- break; // et on quit la boucle
- }
- }
- fputs(SOCKET, "QUIT\r\n" );
- }
- /* fermeture sock */
- fclose(SOCKET);
- ?>
|
Message édité par paranoidandroid le 23-07-2006 à 12:58:47
|