2010-11-18 11 views
1

Hier ist mein Skript:PHP - IRC Verbindung

$ircServer = ""; 
$ircPort = "6667"; 
$ircChannel = "#"; 

set_time_limit(0); 

$ircSocket = fsockopen($ircServer, $ircPort, $eN, $eS); 

if ($ircSocket) { 

    fwrite($ircSocket, "USER Lost rawr.test lol :code\n"); 
    fwrite($ircSocket, "NICK Rawr" . rand() . "\n"); 
    fwrite($ircSocket, "JOIN " . $ircChannel . "\n"); 

    while(1) { 
     while($data = fgets($ircSocket, 128)) { 
      echo nl2br($data); 
      flush(); 

      // Separate all data 
      $exData = explode(' ', $data); 

      // Send PONG back to the server 
      if($exData[0] == "PING") { 
       fwrite($ircSocket, "PONG ".$exData[1]."\n"); 
      } 
     } 
    } 
} else { 
    echo $eS . ": " . $eN; 
} 

das ich habe Problem ist das Hinzufügen einer Funktion, das wird Private Mitteilung jeder auf dem IRC-Kanal. Ich habe versucht, $ lesen und andere Methoden, es funktioniert nicht und IRC hängt.

HINWEIS: Dies ist für pädagogische/private Zwecke keine Schäden oder gemacht.

+1

ich wie jedes IRC-Bot des Gefühl, dass private jede Nachricht in einem Kanal schlechte Nachricht ist, trägt Raymond.: Ich habe das Gefühl, dass du den beabsichtigten Gebrauch posten solltest, da dies für großes Böses verwendet werden könnte. – mattbasta

+0

Nein, es ist für den privaten Gebrauch mein Freund. – Ray

Antwort

4

Ich habe vor Jahren in Perl mehrere IRC-Bots geschrieben, und um ehrlich zu sein, kann ich mich nicht mehr an sie erinnern. Wie auch immer, um eine private Nachricht an alle Benutzer zu senden, müssen Sie zuerst alle Benutzer im Kanal erreichen.

Wie dem auch sei, der Befehl eine private Nachricht senden ist:

PRIVMSG #channel :Sup? 

Ja, es wird echo "Sup?" am # Kanal. Dann gilt dasselbe für einen Benutzer:

PRIVMSG John :Sup? 

Alles, was Sie tun müssen, ist alle Benutzer zu bekommen. Um dies zu tun:

NAMES #channel 

Der Code liegt bei Ihnen. Viel Glück.

EDIT: einen Prozentsatz der Nutzer zu erhalten, sie einfach in einem Array laden, dann shuffle()shuffle($array); verwenden, wenn Sie ihre Positionen randomisieren möchten. Dann verwenden Sie count()$size = count($array); für die Array-Größe, multiplizieren Sie die Größe mit dem Prozentsatz. $target = $size * 0.10; für 10%. Verwenden Sie dann round(), um die abgerundete Zahl zu erhalten.

Schleifen Sie nun das Array der Benutzer und setzen Sie das Limit auf . Hier hast du es.

EDIT: Hier ist ein Beispielcode (der Rest des Codes ist an Sie OFC:

... 

$msg = $_POST['message']; 
$pr = $_POST['percentage']; 
$pr /= $100; // if the input is already 0.10 or something, no need to do this. 

... 

shuffle($users); 
$size = count($users); 
$target = $size * $pr; 
$target = $round($target); 

for ($i = 0; $i <= $target; $i++) { 
    fwrite($ircSocket, "PRIVMSG " . $users[$i] . " :" . $msg . "\n") 
} 

... 
+0

Schön, wie würde ich nach dem Zufallsprinzip einen Prozentsatz der Benutzer auf dem Kanal und private Nachricht greifen ? (PHP Form). – Ray

+0

bearbeitet meine Antwort für Ihre Follow-up-Frage. – Ruel

+0

Ruel, ich glaube, Sie haben missverstanden. Tut mir leid, nicht mach es klar. Ich brauche das PHP-Skript, um zufällig einen Prozentsatz von Benutzern auf dem IRC-Kanal auszuwählen und ihnen "Hallo" zu schicken. – Ray