Avatar billede jammerlab Nybegynder
06. juni 2004 - 00:23 Der er 11 kommentarer og
1 løsning

Noget ala pause i PHP (IRC Server)

Jeg har lavet en irc bot i PHP, og jeg har lidt problemer med den hurtige hastighed ved PHP delen og den noget langsomere response fra IRC serveren.

Kan man sætte en slags timer ind i PHP? Det er fordi når en bruger vil bruge en af bottens commands lad os sige PRIVMSG så når denne køres så whoises brugeren det vil sige en masse oplysninger samles om ham desuden hans auth. Problemet er at lige efter whois i samme if der kontrollere den om han er admin men det går så stærkt at den ikke når at whoise ham færdigt før den kontrollere. Det vil sige den selvf. fortæller man ikke er admin. Kan jeg sætte noget delay på så den venter 5 sek med at kontrollere brugeren så whoisen når at blive færdig?

Koden:

        if ( substr($dCommand,0,3) == '330' && !$cAuth) {
        print "yes";
                preg_match( "/\|[^\s]* ([^\s]*) :is authed as/", $data, $res);
   
        $dAuth = $res[1];
                print "$dAuth";
        }


                        if(substr($dOnlytext, 0, 7) == "PRIVMSG") {

                        fputs($fp,'WHOIS ' . $dNick . CRLF);
                       
            $query = mysql_query("select * from authed WHERE auth = '$dAuth'")or die (mysql_error());
            if (mysql_num_rows($query) > 0) {

            $msg = substr($dOnlytext, 8);
                       
            $A = strpos($msg, ' '); // første mellemrum
           
            $to = substr($msg,0,$A-0); // sætter host
           
            $msg = substr($msg,$A+1);
           
                        fputs($fp,'PRIVMSG ' . $to . ' :' . $msg . CRLF);
                        } else {
                       
                        $msg = "$dNick :Du er IKKE admin...";
                        fputs($fp,'NOTICE ' . $msg . CRLF);
                       
                    }
                   
                    }
Avatar billede dennismp Nybegynder
06. juni 2004 - 00:24 #1
sleep(5);
Avatar billede dennismp Nybegynder
06. juni 2004 - 00:28 #2
Kan bot'en ikke bare "gemme" brugerens kommando i et array, indtil den har fået svar fra whois'en, så den ved om brugeren er godkendt eller ej. Når det så får svar kan den så brokke sig hvis han ikke har lov eller udføre dem een efter een.
Avatar billede jammerlab Nybegynder
06. juni 2004 - 00:34 #3
Dunno, er ikke helt med på hvad du mener. Sådan som den er bygget op så skriver man AUTH den whoiser så brugeren og finder hans Q AUTH fra whoisen og sammenligner den med nogen jeg har lagt i en MYSQL database... det ville faktisk være nice hvis den ikke hele tiden skulle whoise brugeren hver gang han skriver en command... kan vi ikke lave så hvis han skriver AUTH og han er OK som admin at den ligger hans nick i et array? Det er noget hurtigere og nemmere at kontrollere om hans nick er i et array. Så laver jeg bare hvis han skifter nick og han er i arrayet at han så bliver fjernet så andre brugere ikke kan skifte til hans nick...
Avatar billede dennismp Nybegynder
06. juni 2004 - 00:37 #4
Hvis botten sidder på en kanal, kan den ikke så bare lave whois på folk når de joiner (og når den selv joiner) ? Og fjerne informationerne igen når de smutter?

Og så, som du skriver, have et array hvor den gemmer de informationer..
Avatar billede jammerlab Nybegynder
06. juni 2004 - 00:39 #5
jow det var også lige det der slog mig... sider og ser på det nu.
Avatar billede jammerlab Nybegynder
06. juni 2004 - 00:46 #6
Hm help me out here:

Sådan sætter jeg hans auth hans nick og hans host...

$aAuth[] = $dAuth;
$aNick[] = $dFrom;
$aHost[] = $dHost;

Korrekt metode ik? Så skulle den bare gerne adde dem til array'erne.

Metoden jeg så kontrollere om han er admin på:

if (in_array("$dFrom", $aNick) && in_array("$dHost", $aHost)) {

men der siger den så fejl:

in_array(): Wrong datatype for second argument in
Avatar billede dennismp Nybegynder
06. juni 2004 - 00:53 #7
det ser fint ud..

du behøver ikke " rundt om $dForm og $dHost - det giver det samme alligevel.

har du prøvet at bruge var_dump($aHost) og var_dump($aNick) .. og se hvad de outputter. Det kunne tyde på at de ikke er et array når du kommer ned til din if()-sætning.
Avatar billede jammerlab Nybegynder
06. juni 2004 - 01:10 #8
Det virker godt nok noget underligt :/

Lige under
$aAuth[] = $dAuth;
$aNick[] = $dFrom;
$aHost[] = $dHost;

har jeg

mysql_query("insert into authed (auth_nick,auth,tid,unix) values ('$cNick','$dAuth','$tid','$unix')")or die (mysql_error());

Den smider alt ind i mysql'en som den skal altså mit auth er korrekt og det hele, men se lige outputet fra de 2 arrays:

array(1) {
  [0]=>
  string(70) ":tiscali.dk.quakenet.org 330 |PHPBotling| Amici|Sniper_C Sniper_C :is "
}
array(1) {
  [0]=>
  string(23) "tiscali.dk.quakenet.org"
}

De er da helt hen i vejret de skulle lyde på Sniper_C og Amici|Sniper_C og det gør de da ihvertfald ik ;)
Avatar billede dennismp Nybegynder
06. juni 2004 - 01:16 #9
I din sql bruger du $cNick men ved $aNick[] bruger du $dForm .. er det med vilje?
Avatar billede jammerlab Nybegynder
06. juni 2004 - 01:27 #10
My bad... den skulle være $cNick :) roder lidt med host'en... det må være en tidligere fejl jeg ikke har fået rettet.
Avatar billede jammerlab Nybegynder
06. juni 2004 - 02:20 #11
Ser ud til at fungere fter hensigten nu :D Så lig et svar mester.
Avatar billede dennismp Nybegynder
06. juni 2004 - 02:55 #12
Herligt,

det er også ved at være sengetid for mit vedkommende - men forsat god kodning :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester