Archiv verlassen und diese Seite im Standarddesign anzeigen : php bot befehle erkennen
echoslider
25.06.2009, 18:53
$privmsg = strpos($connection['READ_BUFFER'],'PRIVMSG '.$cuser.' :');
if($privmsg!== false)
{
$msg=explode('PRIVMSG '.$cuser.' :',$connection['READ_BUFFER']);
echo"$msg[1]<br>\n\r";
if($msg[1]=="hiho")
{
echo"ok<br>\n\r";
}
}
$msg[1] hat inhalt. es wird also richtig getrennt durch explode.
nur das $msg[1] wird in der unteren schleife irgendwie ignoriert d.h. das "hiho" wird ausgegeben aber in der schleife nicht erkannt das "ok" ausgegeben wird.
warum?! was mach ich falsch... ich brauche das für einen späteren login wie z.b
!login 1234
if($msg[1]=="hiho")
{
echo"ok<br>\n\r";
}
blackberry
25.06.2009, 19:14
Ich würde mal behaupten, dass du explode falsch benutzt...
Füg doch mal ein print_r($msg); unter dem explode hinzu und schau dir die Ausgabe an
PS: IF ist _keine_ Schleife
echoslider
25.06.2009, 20:47
ok... sorry für die falsche definition. war mir natürlich klar.. aber ich war grad mit dem fehler beschäftigt und bissl genervt durch arbeit usw...
[RECIVE] :echoslider!~echoslide@XXXXXXXXXXXX PRIVMSG localhost170 :test
Array ( [0] => :echoslider!~echoslide@XXXXXXXXXXXX [1] => test ) test
also die antwort sieht eigendlich ok aus. deswegen verstehe ichs ja auch nicht... was der fehler sein soll.
probier mal
echo "$msg[1]. <br>\n\r";
ob nich vielleicht nen leerzeichen oder so dahinter ist
blackberry
26.06.2009, 12:47
Könntest du uns mal den ganzen Code geben, damit wir das auch selber testen können?
echoslider
26.06.2009, 13:49
probier mal
echo "$msg[1]. <br>\n\r";
ob nich vielleicht nen leerzeichen oder so dahinter ist
jo war eins drin. hattest recht. allerdings funktioniert das trotzdem nicht wenn ich in der abfrage das leerzeichen zusätzlich in die überprüfung reinschreibe..
<?php
set_time_limit(0);
error_reporting(E_ALL);
$randomcodecrypto=rand(1,5);
switch ($randomcodecrypto)
{
case 1:
$codecryptokey='69';
break;
case 2:
$codecryptokey='474';
break;
case 3:
$codecryptokey='31';
break;
case 4:
$codecryptokey='843';
break;
case 5:
$codecryptokey='221';
break;
}
$authkey='45bb7';
$server=array('irc.quakenet.org:6667','irc.abjects .net:6667','irc.rizon.net:6667','irc.ashnet.org:66 67','irc.abbaddon.net:6667','irc.1st-assylum.org:6667');
$anzserver=count($server);
$randomserver=rand(0,($anzserver - 1));
$cserver=$server[$randomserver];
$channel=array('#croto','#likni','#odabi','#snipli klu');
$anzchannel=count($channel);
$randomchannel=rand(0,($anzchannel - 1));
$cchannel=$channel[$randomchannel];
$randomuser=rand(30,700);
$cuser=''.$_SERVER['SERVER_NAME'].''.$randomuser.'';
$port=explode(':',$cserver);
$cport=$port[1];
/*
function connect($cserver,$cport,$cuser,$cchannel)
{
*/
echo"$cserver $cchannel $cuser<br>\n\r";
$connection = array();
$connection['SOCKET'] = @fsockopen($cserver, $cport, $errno, $errstr, 2);
if($connection['SOCKET'])
{
SendCommand("PASS NOPASS\n\r");
SendCommand("NICK $cuser\n\r");
SendCommand("USER $cuser $cuser $cuser $cuser\n\r");
while(!feof($connection['SOCKET']))
{
$connection['READ_BUFFER'] = fgets($connection['SOCKET'], 1024);
echo "[RECIVE] ".$connection['READ_BUFFER']."<br>\n\r";
if(strpos($connection['READ_BUFFER'], "376"))
{
SendCommand("JOIN $cchannel\n\r");
}
if(substr($connection['READ_BUFFER'], 0, 6) == "PING :")
{
SendCommand("PONG :".substr($connection['READ_BUFFER'], 6)."\n\r");
SendCommand("QUOTE PONG :".substr($connection['READ_BUFFER'], 6)."\n\r");
}
//------------------------
$string=$connection['READ_BUFFER'];
$privmsg = stripos($string,'PRIVMSG '.$cuser.' :');
if($privmsg)
{
$cmd=explode('PRIVMSG '.$cuser.' :',$string);
echo "$cmd[1].<br>\n\r";
if($cmd[1]=='\'login 45bb7 ')
{
echo'command found and correct';
}
}
//------------------------
flush();
}
}
/*
}
*/
function SendCommand ($cmd)
{
global $connection;
@fwrite($connection['SOCKET'], $cmd, strlen($cmd));
echo "[SEND] $cmd <br>";
}
function codecrypt($string, $key)
{
$finalcrypt='';
for($i = 0; $i < strlen($string); $i++)
{
$finalcrypt .= chr(ord($string{$i})+$key);
}
return $finalcrypt;
}
function codedecrypt($string, $key)
{
$finaldecrypt='';
for($i = 0; $i < strlen($string); $i++)
{
$finaldecrypt .= chr(ord($string{$i})-$key);
}
return $finaldecrypt;
}
?>
blackberry
26.06.2009, 14:11
Ok habs!
Ab Zeile 83 (oder so...)
$string=trim($connection['READ_BUFFER']); // trim löscht Leerzeichen und andere "Whitespaces" wie \n oder \r am Anfang und am Ende eines Strings
// Die Bedingung tritt nur ein, wenn du privat mit dem Bot chattest... ich habe das jetzt mal allgemein auf den channel ausgeweitet (privmsg an den Bot sollte immernoch funktionieren)
// $privmsg = stripos($string,'PRIVMSG '.$cuser.':');
// finde ich besser... ".*" ist ein Wildcast - besser wäre natürlich alles was der Server sendet direkt zu parsen und dann du vergleichen: ist der Befehl = PRIVMSG, usw. - siehe RFC 1459 für eine IRC Protokoll Spezifikation: http://tools.ietf.org/html/rfc1459
if(preg_match('|PRIVMSG .* :|', $string))
{
// TODO: cmd richtig parsen!! - sollte eigentlich schon vorher geschehen sein
// auch hier wieder Wildcasts... - NUR PROVISORISCH!!!! ÄNDERN!!!!!
$cmd=preg_split('|PRIVMSG .* :|', $string, -1);
// Debug Ausgabe
print_r($cmd);
// klappt jetzt
if($cmd[1]=='!login 45bb7')
{
echo'command found and correct';
}
mfG. BlackBerry
PS: ein paar Tabs würden dem Sourcecode echt gut tun... ich hab leider nur HTMLValidator Lite zum Highlighten und der macht das nicht sehr schön - echt schwierig herauszufinden welches if in welchem if verzweigt ist.........
echoslider
26.06.2009, 14:24
einen sehr großen dank an dich BlackBerry. es funktioniert.
Powered by vBulletin® Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.