IRC Bot prob

Tec

Grünschnabel
PHP:
<?php

 error_reporting (0);
 ignore_user_abort();
 set_time_limit(0);
 
 class bot {
  var $connected = 0;
  var $name = "TecBot";

  var $logfile = "logs/log.txt";
  function connect() {
   global $fp;
   
   if($this->connected != 1) {
    $this->connected = 1;
    fputs($fp, "USER ".$this->name." 2 3 :bla");
    fputs($fp, "NICK ".$this->name);
   }
  }

  function checkpong($zeile)
  {
    global $fp;

    $tmp = explode(":", $zeile);
    fputs($fp, "PONG ".$tmp[1]."\n");
  }
  
  function log($txt) {
   if($txt != "") {
   $string = $txt.chr(10).chr(13);
   $lfile = @fopen($this->logfile, 'a');
   fputs($lfile, $string);
   fclose($lfile);
   }
  }
 }
 
 $bot = new bot;
 
 $fp = fsockopen("irc.euirc.net", 6667, $errno, $errstr, 30);
 socket_set_blocking($fp, FALSE);
 
 if(!$fp) {
  die("Connection failed");
 }
 $bot->connect();
 fputs($fp, "JOIN #meinchann");
 while (!feof($fp))
 {

  $text = fgets($fp, 1024);
  $bot->log($text);
  
  if(preg_match("/^PING/",$text))
  {
        $bot->checkpong($text);
  }
  if(substr($text,0,6) == "ERROR")
 {
   die();
 }
 }
?>

log:
ERROR :Closing Link: [hiermeineip] (Ping timeout)

was ist daran falsch?
 
Zuletzt bearbeitet:
-

Du musst am Ende einer Nachricht an den Server imm \r\n (CRLF) mitschicken, damit er weiß, dass die Nachricht komplett ist. Außerdem parst du den Ping-Reply falsch.
PHP:
fputs($fp, "PONG :".$tmp[1]."\r\n");

In den Tutorials findest du ein funktionierendes Beispiel, wie man eine IRC Verbindung richtig aufbaut.
 
Zurück