webForumDet fria alternativet
Logga in / Bli medlem

Sockets och irc

PHP

10 svar · 318 visningar · startad av Qimen

Medlem sedan juni 20015 009 inlägg
Trådstart#1

Hej

Jag håller på med en irc bot som är skriven i php. Jag kommer in på olika nät som jag vill, ex quakenet. Där lyckas jag även hålla kvar boten samt jag kan få den att lämna nätet via ett kommandon.

Nu har jag dock ett par problem. Hur ska jag göra för att bara jag ska kunna styra boten? Jag vet att jag måste sätta så att endast min host är tillåten och att hosten måste vara i formatet :n!i@h. Ex. :Qimen!qimen@adress.nu

Scriptet jag har ser ut så här:

<?php
ini_set("output_buffering",0);
ini_set('max_execution_time', 0);

/* ====================== 
Variablar 
====================== */ 

$NICK = 'PixelWorld'; 
$IDENT = 'pw'; 
$CHANNEL = '#PixelWorld-dev'; 

/* ====================== 
Funktion 
====================== */ 

function pw($input) { 
global $fp; 
fputs($fp, $input."\r\n\r\n"); 
} 

function pong($id) { 

global $CHANNEL, $fp, $firstPING; 
fputs($fp, "PONG ".$id."\r\n\r\n"); 

if ($firstPING <= 1) { 
fputs($fp, "JOIN $CHANNEL\r\n\r\n"); 
} 

} 

/* ====================== 
Kontakt
====================== */ 

$fp = fsockopen ("irc.quakenet.org", 6667, $errno, $errstr, 30); 
if (!$fp) { 

die("$errstr ($errno)<br>\n"); 

} 

pw("USER $NICK $NICK $NICK :$NICK"); 
pw("NICK $NICK $IDENT"); 

/* ====================== 
Abooo... 
====================== */ 

$firstPING = 0; 
while (!feof($fp)&&!$eof) { 

$msg = str_replace("\n", "", str_replace("\r", "", fgets ($fp,2048))); 
if (strtoupper(substr($msg, 0, 4)) == 'PING') { 

$firstPING++; 
$pID = substr($msg, 6); 
pong($pID); 

} else if (substr($msg, -8) == '!pw quit') { 

pw("QUIT :"); 

} else if (substr($msg, -8) == '!pw join') {

pw("JOIN #PixelWorld"); 
 
}
echo $msg.'<br />'; 
} 

fclose($fp);
 
?>

Nu kan alla styra den med kommandona !pw join och !pw quit. Vilket jag måste förhindra. :l
Några ideer? :)

Medlem sedan juli 2000297 inlägg
#2

Kolla i RFCn hur det ser ut när någon skriver något i en kanal, har bestämt för mig att hostmask och grejer "hänger med". I så fall är det ju bara att filtrera strängen efter rätt hostmask. Kolla RFCn som sagt, om du inte redan gjort det.

Medlem sedan juni 20015 009 inlägg
#3

Har skummat igenom ett dokument om RFC1459 som gäller för irc men hittar inget om det.

Medlem sedan juli 2000297 inlägg
#4

Hur ser $msg ut?

Medlem sedan juni 20015 009 inlägg
#5
$msg = str_replace("\n", "", str_replace("\r", "", fgets ($fp,2048)));

?
Vet inte riktigt exakt hur den ser ut när man tar imot den, fick en del hjälp med just den biten. :o

Medlem sedan juli 2000297 inlägg
#6

Testa att skriva ut den precis när du tagit emot den, och se hur den ser ut :). echo $msg; eller liknande direkt efter den raden.

Medlem sedan juni 20015 009 inlägg
#7

Hmm tror inte jag kan göra det. Jag kör scriptet via webbläsaren och när boten kommit in på irc så avbryter man läsaren för att inte få fel.

Medlem sedan juli 2000297 inlägg
#8

Hm.. Du kan inte skicka output till en fil? :)

Medlem sedan juni 20015 009 inlägg
#9

Nuså.

:Qimen!qimen@villhasex.nu PRIVMSG #PixelWorld-dev :!pw quit)

Så ser msg ut när jag skriver !pw quit, dvs kastar ut boten från irc.

Medlem sedan juli 2000297 inlägg
#10

Precis.. Där har du din hostmask.. Bara att filtrera $msg så scriptet kollar efter din hostmask innan den utför någonting.

Medlem sedan juni 20015 009 inlägg
#11

Jopp, sitter och testar lite med det nu. Återkommer. :)

/r Weee funkar, bara jag som kan styra den nu. Då var ett problem löst och nu vet jag nog hur jag ska lösa mina andra problem med. Tackar!. :D :bire

263 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)