PHP IRC Robot, Command Gönder, ama şimdi ben komut okumak için bot gerekir

3 Cevap php

Ben, benim kanal kullanımı ve bana göre komut belirli set kullanıcılara OP yapmak için gereken bir PHP IRC Robot var. Neyse ben kullanıcı dolandırıcılık ya da bir şey her türlü önlemek için NickServ içine açtıysa robot kontrol etmek istiyorum.

Anyways, here is my connect and DO things code, followed by what I really need help with below it. All help is appreciated. :) On Freenode, typing /NS ACC [user] will return whether or not the [user] is logged in with a numerical value, they decided 3 would be logged in. and 0-2 as some sort of not logged in.

Yani burada benim IRC kanalına bot günlükleri ... nasıl (BwaddArr (ya da e-posta için isteyin, freenode # tyreus katılmak için çekinmeyin))

<?php
set_time_limit(0);  //Stop the script timing out

$server = "irc.freenode.net";        //server to connect to
$channel = "#tyreus";               //channel to connect to initialy
$password = "sumpass";             //password for bot to login to irc
$pass2 = "anotherpass";               //password to make the bot do stuff
$users[0] = "0";                  //array of logged in users
$nickname = "Samcal";            //Set the bot's nick here
$logger = FALSE;                //for the channel logger
$takeover = FALSE;             //for the auto banner

$socket=fsockopen($server,'6667') ; //Connect and join the channel

stream_set_timeout($socket, 300);  //Set a timeout value (so the bot quits if it's disconnected)
fwrite($socket, "NICK ".$nickname."\r\n");
fwrite($socket, "USER ".$nickname." 8 * ::\x01VERSON 1.0 Brad's bot\x01\n");  //read rfc 1459 to understand this line

  while ($line=fgets($socket)) {
     echo htmlentities($line)."<br>"; 
       if (strpos($line, "433")>0) die("error nick in use");  //Quit if bot's nick is already taken (irc code 433 is received)

       if (strpos($line, "004")>0) {
          fwrite($socket, "JOIN ".$channel."\r\n"); //Join the channel if everything is ok (irc code 004 is received)
          fwrite($socket, "NickServ IDENTIFY ".$nickname." ".$password."\r\n");
          fwrite($socket, "ChanServ OP ".$channel." Samcal\r\n");
          fwrite($socket, "MODE ".$channel." +v Samcal \r\n");
          break;
       }
  }

I gerçekten tüm yardıma ihtiyacı Ve burası! :)

 if(strpos($line, "PRIVMSG ".$channel." :+oB\r\n")>0) { //Command to make the bot run the command
	$name = "BwaddArr"; // my username, this can be easily changed to the other users who will need opping
	$command = "NickServ ACC $name"; // the NickServ command I was talking about
	$result = fwrite($socket, "$command \r\n"); // my attempt at retrieving the result
    $accr = readline(strpos($line, "$result \r\n")); //part 2 of my failure to retrieve a result
	$loggd = str_replace("3","three","$accr"); // replace '3' with 'three'
 if($loggd != "three") { // if result is not three do below
	fwrite($socket, "PRIVMSG ".$channel." :$name is not logged in. \r\n"); // write into the chat that the user is not logged in
}
 if($loggd == "three") { // OP the user if they are logged in
	fwrite($socket, "MODE ".$channel." +ov $name\r\n"); // sends the OPping command
}
}
?>

3 Cevap

Ben ikinci pasajı süre (fgets ()) döngü içinde bulunduğu varsayalım.

Eğer o fwrite () kullanın döngü içinde bir sonuç olmaz. Başka fgets () sonra ekleme ya

$result = fwrite($socket, "$command \r\n");

veya dolayısıyla döngü ve belki onun vücudunun bir sonraki yürütme nasıl davranacağını bilmek bir durum bayrağı ekleyin.

Her şeyden önce, sizin için bot şifresini kaldırmak. (Sabit)

Sizin IRC, iyi şanslar bazı ipuçları verdi, şimdi doğru yoldayız.

Ben gençken, bir tane yaptım.

Ben döngü bu tür kullanılır:

$irc = fsockopen($server, $port);
// ...
while(!feof($irc))
{
     $line = fgets($irc, 2048);

     // ...
     // Parsing $line here
     // ...
}

Umarım bu yardımcı olur.