webForumDet fria alternativet

Sockets och irc

10 svar · 318 visningar · startad av Qimen

QimenMedlem sedan juni 20013 568 inlägg
#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? :)

sebbzMedlem sedan juli 2000158 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.

QimenMedlem sedan juni 20013 568 inlägg
#3

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

sebbzMedlem sedan juli 2000158 inlägg
#4

Hur ser $msg ut?

QimenMedlem sedan juni 20013 568 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

sebbzMedlem sedan juli 2000158 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.

QimenMedlem sedan juni 20013 568 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.

sebbzMedlem sedan juli 2000158 inlägg
#8

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

QimenMedlem sedan juni 20013 568 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.

sebbzMedlem sedan juli 2000158 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.

QimenMedlem sedan juni 20013 568 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

128 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
126 ms — hämta tråd, inlägg och bilagor (db)