[PHP/mySQL]IRC-WAR-BOT

Wini

Gesperrt
Also ich hab jetzt folgenden PHP code:
PHP:
<? 

	// Set the PHP Timeout to 0, so we wont get killed by PHP 
    set_time_limit(0); 

    // define \r\n for easy use 
    define ('CRLF', "\r\n"); 

    // Just some variables we need to connect 
	$i++;
	$nick = 'eXg|D3s3Rtb0t'; // The nick 
    $username = 'me'; // The Username (username@hostname) 
    $localhost = 'localhost'; // The localhost, this dosen't really metter, the server will find the right one, or use your IP. 
    $remotehost = 'de.quakenet.org'; // The server we are connecting to 
    $realname = 'me myself'; // Your realname, (real my ass<img src="images/smilies/wink.gif" border="0" alt=""> 
    $channel = '#websn@ker'; // Channel we join to on connect 



    // Open the socket 
    $fp = fsockopen($remotehost,6667, &$err_num, &$err_msg, 30); 

    if(!$fp) { // Error trying to connect 
        print "Sorry, the server is not currently available!"; 
        exit; 
    } 

    // Send the connect data (This is a part of the IRC RCF, read it if you are going to code more irc stuff) 
    $Header = 'NICK ' . $nick . CRLF; 
    $Header .= 'USER ' . $username . ' ' . $localhost . ' ' . $remotehost . ' :' . $realname . CRLF; 
    fputs($fp, $Header); 

    // define response as a variable, so we wont get a error. 
    $response = ''; 
    while (!feof($fp)) { // Make a while loop untill the socket is closed 
        $response .= fgets($fp, 1024); // Append 1024 bytes to $response (if any), from the socket buffer 
        while (substr_count($response,CRLF) != 0) { // Check if there is CRLF (linesplit) in $response, and do that untill none 
            $offset = strpos($response, CRLF); // Just to know where the line ends 
            $data = substr($response,0,$offset); // Split the line from the rest of the data 
            $response = substr($response,$offset+2); // Split the rest from the line 
            if ( substr($data,0,1) == ':' ) { // If the first char is : then go to this loop 
                // Lines starting whit : are in this format 
                // :sender command :text 
                // So we need to split it like that 

                $offsetA = strpos($data, ' '); // Find first space 
                $dFrom = substr($data,1,$offsetA-1); // set $dFrom as the sender 
                $offsetB = strpos($data, ' :'); // Find the first : 
                $dCommand = substr($data,$offsetA+1,$offsetB-$offsetA-1); // Set $dCommand as the command 
                $dText = substr($data,$offsetB+2); // set $dText as the text. 

                if ( substr($dCommand,0,3) == '004' ) { 
                    // This is just a part of the connect headers that the server send. (001,002,003,004,005) 
                    // Some server dont send 005, so i use 004 to know if i´m connected 
                    fputs($fp,'JOIN ' . $channel . CRLF); // Join $channel 
                    fputs($fp,'PRIVMSG ' . $master . ' Es !' . CRLF);
                } 
                elseif ( substr($dCommand,0,7) == 'PRIVMSG' ) { 
                    // If somebody msgs us, or if there is some tolk on a channal, this is send. 

                    if ( Ord(substr($dText,0,1)) == 1 ) { 
                        //  If first chars acsii code is 1 then its a CTCP question. 
                        if ( substr($dText,1,4) == 'PING' ) { 
                            // Sombody CTCP pinged us, lets respond 
                            fputs($fp,':' . $nick . ' NOTICE ' . $dFrom . ' :' . chr(1) . 'PING ' . substr($dText,6) . chr(1) . CRLF); 
                        } 
                        elseif ( substr($dText,1,7) == 'VERSION' ) { 
                            // Somebody versiond us, lets respond 
                            fputs($fp,':' . $nick . ' NOTICE ' . $dFrom . ' :' . chr(1) . 'VERSION PHPirc' . chr(1) . CRLF); 
                        } 
                        if ( substr($dText,1,5) == 'CLOSE' ) { 
                            // Reaktion auf "/ctcp [botname] close"
                            fclose ($fp); //close socket
                        }                 
                    } 
                    else { 
                        // Else, do this. This is just a relay of all privemsg sent to use, will go right to the server. 
                        // so we can send RAW message for testing<img src="images/smilies/smile.gif" border="0" alt=""> 
                        fputs($fp,$dText . CRLF); 
                    } 
                } 
                 
            } 
            elseif ( substr($data,0,4) == 'PING' ) { // Else if first 4 chars are PING do this 
                // If the server pings us, respond. This must be done or we will get timeout 
                fputs($fp,'PONG ' . substr($data,5) . CRLF);  
            } 
        } 
    } 
    // If we are here, then the server has disconnected use 
     
    // Close the socket 
    fclose ($fp);     
?>
also und nun will ich das man wenn man im channel !wars eintippt, dass der bot dann die letzten fünf wares anzeigt also so

PHP:
$sql_getinfo1 = "select * from ws_wars ORDER BY ID desc LIMIT 0,5";
und die sollten im chan angezeigt werden:sad:
 
Also wie man mit einem IRC server kommuniziert steht alles genauestens in RFC 1495
http://www.irchelp.org/irchelp/text/rfc1459.txt


aber um deinem problem näher zu kommen...
Code:
                    else { 
                        // Else, do this. This is just a relay of all privemsg sent to use, will go right to the server. 
                        // so we can send RAW message for testing<img src="images/smilies/smile.gif" border="0" alt=""> 
                        fputs($fp,$dText . CRLF); 
                    }

vor diesem stück code musst du ein elseif einfügen in dem du prüfst ob die nachricht aus dem chanel kommt und wenn ja ob sie den trigger enthält...
wenn ja sendest du
:botname PRIVMSG #chanel nachricht\r\n
und die nachricht ist dann eben das was du senden willst, was das is is ihm ganz egal, nur keine \r und \n sondern dann einfach nochmal das selbe mit der nächstes zeile

und pass auf das du dich net selbst raus wirft, die meisten server killen dich wenn du zu schnell sendest
 
(Danke) erstmal:)
aber könntest du das nochmal in code fassen?
ich versteh bzw kann das nicht, also ich weiß nicht wie ich das mit elseif machen soll(das überprüfen) und ich hab auch noch nicht ganz verstanden wie man das mit dem nachrichten zum channel senden machen kann
 

Neue Beiträge

Zurück