Connexion IRC pour lister utilisateurs d'un channel.

Connexion IRC pour lister utilisateurs d'un channel. - PHP - Programmation

Marsh Posté le 23-07-2006 à 12:57:34    

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 :
  1. <?php
  2. $strServeur = "euroserv.fr.quakenet.org"; // serveur IRC
  3. $intPort = 6667; // port..
  4. $strNickCMD = "NICK udontseeme"; // pas tout a fait vrai.
  5. $strNick = ":udontseeme";
  6. $strInfo = 'USER Android2006 0 * :bot';
  7. $strChannel = "JOIN #kefas"; // votre channel IRC
  8. $strNames = "NAMES #kefas"; // liste utilisateurs
  9. function send_data ($message) {
  10.      fputs (SOCKET, "$message\r\n", 4096);
  11. }
  12. function read_ping ($in) {
  13.       if (strpos ($in, 'PING :') !== FALSE ) {
  14.           send_data ('PONG '.substr ($in, 6));
  15.       }
  16. }
  17. function read_data ($data) {
  18.       $in = fgets ($data, 4096);
  19.       read_ping ($in);
  20.       return $in;
  21. }
  22. $open_socket = @fsockopen($strServeur, $intPort); // ouverture socket sur le serveur
  23. if (feof ($open_socket))
  24. {
  25.  die ("Couldn't connect to IRC" );
  26. }
  27. else
  28. {
  29.  define ('SOCKET', $open_socket);
  30. send_data ($strInfo);
  31.  send_data ($strNickCMD);
  32.  $i = 0;
  33.  while (SOCKET)
  34.  {
  35.  if ($i++ == 5)
  36.  {
  37.   send_data ($strChannel);
  38.   send_data ($strNames);
  39.  }
  40.  $in = read_data(SOCKET);
  41.  if(strstr($in, "353" ))
  42.  { // on détecte si c'est la réponse à notre cmd NAMES
  43.   $temp = substr(strstr($in, $strNick),strlen($strNick));
  44.   $temp = explode(" ", trim($temp));
  45.   print_r ($temp);
  46.   break; // et on quit la boucle
  47.   }
  48.  }
  49.  fputs(SOCKET, "QUIT\r\n" );
  50. }
  51. /* fermeture sock */
  52. fclose(SOCKET);
  53. ?>


Message édité par paranoidandroid le 23-07-2006 à 12:58:47
Reply

Marsh Posté le 23-07-2006 à 12:57:34   

Reply

Marsh Posté le 29-09-2008 à 22:45:44    

salut je ne sais pas du tout si ce sujet est toujours d'actualité pour toi mais j'ai besoin de la même fonction que toi!
en fait je sais comment faire pour lancer ton script à part il suffit de faire:
$server = $_SERVER["SERVER_NAME"];  
$get = '/ampc/chat/actualise_chat.php';  
$fp = fsockopen($server, 80);  
fputs($fp, "GET {$get} HTTP/1.1\r\n" );  
fputs($fp, "Host: {$server}\r\n" );  
fputs($fp, "X-Header1: blah\r\n" );  
fputs($fp, "X-Header2: blah2\r\n" );  
fputs($fp, "Connection: Close\r\n\r\n" );  
fclose($fp);  
 
moi j'ai utilisé une librairie php: net smart irc pour essayer de faire la meme chose que toi
 
si quelqu'un d'autre sait un peu comment faire pour construire cette fonction même de me le signaler je pourrais lui poser quelques questions ;) merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed