PHP script soll IRC channel auslesen

tefla

Erfahrenes Mitglied
... und die user wiedergeben.

ich weiss das es sowas bereits gibt, aba ich hab wie blöde gesucht und nix gefunden, hab auch versucht es selber zu schreiben aber es soll nicht so ganz funktionieren.

bitte hat jemand bereits so ein script geschrieben ?
könnte er es einmal posten ?

wär mir echt wichtig danke
 
ich hab auch schon was davon gehört allerings nur in verbindung mit einem flash-chat, da gab es mal ein kostenloses chatsystem für einen irc-server, ich glaub da war ne php-datei mit dabei sicher bin ich mir aber nicht
 
Also

ein PHPFile wird sicherlich dabeigewesen sein,
sonst wird sich FLASH (ausser MX vielleicht)
schwertun mit dem IRC zu connecten :-)

Hier mal meine Funde :

http://www.dynamic-webpages.de/php/ref.ircg.php
http://www.mcmoses.de/zeug/phpirc.html
http://www.phpwizard.net/projects/phpIRC/

Was spezifisches zu deiner Frage habe ich allerdings
nicht finden können. Du wirst (wohl oder übel) das
Wissen dafür aus den Tutorials herausfiltern
müssen und dir den Script selber zusammenbauen
müssen.

Wenn du das geschafft hast, könntest du dann vielleicht
ein Tutorial darüber schreiben. Die Frage ist nämlich
in #tutorials.de auch schon aufgetaucht.

Gruß,
Mentor Jonathan
 
tefla, melde dich mal bei mir im ICQ (nummer steht hier unten), ich möchte auch so nen chat machen, evtl. können wir ne gmeinsame lösung finden und den spaß hinbiegen.
 
-

PHP:
<?PHP
class irc
{
    var $remotehost;
    var $remoteport;
    var $nick;
    var $ircsocket;
    var $channel;
    var $flag = true;
    function irc($remotehost, $remoteport, $nick, $channel)
    {
        set_time_limit(0);
        ob_end_flush();
        $this->remotehost = $remotehost;
        $this->remoteport = $remoteport;
        $this->nick = $nick;
        $this->channel= $channel;
    }

    function ircConnect()
    {
        $this->ircsocket = fsockopen($this->remotehost, $this->remoteport);
        if( ! $this->ircsocket )
            die("Keine Verbindung");
        fputs( $this->ircsocket, "USER lister  0 0 :who channel\r\n");
        fputs( $this->ircsocket, "NICK $this->nick\r\n");
    }
    
    function send($message)
    {
        $message = $message."\r\n";
        fputs( $this->ircsocket, $message);
    }


    function ircParse()
    {
        while( ! feof($this->ircsocket))
        {
               $incoming = fgets( $this->ircsocket, 1024 );
               $incoming = str_replace("\r", "", $incoming);
               $incoming = str_replace("\n", "", $incoming);
               if( preg_match("/PING/", $incoming))
               {
                   $ping = explode(":", $incoming);
                   $this->send("PONG $ping[1]");
               }
               $params = explode(" ", $incoming);
               if( ! $this->flag )
                   echo $params[4]."<br>";

               if( $params[5] == "/MOTD" )
               {
                   $this->send("WHO $this->channel");
                   $this->flag = false;
               }
               if( $params[6] == "/WHO" )
                   $this->send("QUIT bye");
         }
         $this->send("QUIT bye");
    }

}
$test = new irc("irc.bla.net", "6667", "testingWHO", "#channel");
$test->ircConnect();
$test->ircParse();
?>
Hab hier mal ne kleine Klasse geschrieben, womit man die User in einem Channel ausgeben kann. Hab das jetzt nur kurz zusammengeklatscht, normal sollte man sich an das IRC Protokoll halten, wie man die Nachrichten auseinander nimmt. Aber ich denke, dass dieses Beispiel Zeigt, wie man bei diesem Problem vorgehen muss.
Also viel Spaß beim weiter friemeln

Am besten man liest sich die RFC durch, damit man die Servernachrichten richtig interpretieren kann.
http://www.faqs.org/rfcs/rfc1459.html
 
Zuletzt bearbeitet:
danke dir, klappt wunderbar bis jetzt, muss allerdings bloß rausfinden wieso er nicht ALLE user listet, die im channel sind. er listet nämlich nur höchstens 5 - 6, kanns am socket liegen, dass der zu schnell zumacht, wegen feof()??
 
-

Nein, dass Script beendet sich erst, wenn die /WHO Liste abgeschlossen ist. Wahrscheinlich liegt es an den IRC Modes für den User. Man kann sich ja unsichtbar für aussenstehende machen.
 
hab mal versucht infos über einen channel zu listen und zwar habe ich dazu nur ein paar zeilen geändert:

PHP:
               if( $params[5] == "/MOTD" )
               {
                   $this->send("LIST $this->channel");
                   $this->flag = false;
               }
               if( preg_match("/\/LIST/", $incoming) )
                   $this->send("QUIT bye");

da ich nicht wusste wo eolist kommt habe ich pregmatch genommen, trotzdem lädt er sich tot? wie bist du an die parameter gekommen, z.b. $param[5] ???

//edit eigentlich war noch vor dem 2. / ein backslash, den entfernts aber immerwieder
 
also es liegt an +invisible
nur das prob is das 50% aller user invisible is


wäre es nicht vielleicht besser das script einen channel joinen zu lassen und dann alle nicks auslesen zu lassen ???

hab nur noch kein plan wie *lesen*
 
Zuletzt bearbeitet:
Zurück