Avatar billede impulze Nybegynder
01. januar 2009 - 14:51 Der er 5 kommentarer og
1 løsning

Fejl i IRC Bot script

Sidder og leger lidt med et bot-script til IRC, som jeg fandt på nettet.
Det virker ret okay og det kører fint over mysql database.

Men nu ønsker jeg og tilføje noget ekstra, hvor bl.a. kommandoen "!hp" skal vise et link og "!quit" skal kunne lukke botten ned med "/quit" funktionen i IRC.

I dette udsnit her nedenfor er der allerede en "!conf" og "!stats" kommando, som ellers virker fint. Her regnede jeg ellers med det var lige til og tilføje, men ak nej.

--->

    if ($arg[1] == "PRIVMSG") {
    if ($arg[2]{0} == "#") {
    echo "<$nick@$chan> $msg\n";
    $q = "INSERT INTO `log`    (`time`, `network`, `event`, `chan`, `nick`, `sentence`)
    VALUES('$time', '$conf[network]', 'PRIVMSG', '$chan', '$nick', '$msg');";
    mysql_query($q);
    if ($arg[3] == ":!conf") {
    $x = $arg[4];
    msg($chan, "conf: ".$conf[$x]);
    }
    if ($arg[3] == ":!hp") {
    msg($chan, "www.boller.nu);
    }
    if ($arg[3] == ":!quit") {
    msg($chan, "/quit);
    }
    if ($arg[3] == ":!stats") {
    $mtime = microtime();
    if ($arg[4]) { $x = $arg[4]; }
    else { $x = $nick; }
    $r = mysql_query("SELECT * FROM `log` WHERE `event` = 'PRIVMSG' AND `nick` LIKE '$x' AND `chan` LIKE '$chan';");
    $words = 0; $letters = 0;
    while ($line = mysql_fetch_array($r)) {
    $words += count(explode(" ", $line[sentence]));
    $letters += strlen($line[sentence]);
    }
$lines = mysql_num_rows($r);
$r = mysql_query("SELECT nick FROM `log` WHERE `chan` LIKE '$chan' AND `event` LIKE 'PRIVMSG';");
$class = "";
if (!mysql_num_rows(mysql_query("SELECT * FROM `log` WHERE `nick` LIKE '$x' AND `chan` LIKE '$chan'"))) { msg($chan, "[$x] der er ingen database oprettet under $chan"); }
    else {
while ($line = mysql_fetch_array($r)) {
$z = $line[nick];
$class[$z] += 1;
}
$n = 1;
foreach ($class as $nick_ => $number_) { if ($number_ > $lines) { $n++; } }
msg($chan, "Hej ".$x.". Her er nogle hurtige stats - Total antal af ord: ".$words." og tegn: ".$letters." - Gennemsnit: ".round(($words / $lines),2));
msg($chan, "Find flere stats på: http://boller.nu/ircstats/?chan=".str_replace("#", "", $chan));

<---

Den kommer op med fejlen "Parse error: syntax error, unexpected ':'", som er ved linjen med !quit..
Avatar billede erikjacobsen Ekspert
01. januar 2009 - 16:49 #1
Jeg vil tro, der mangler en " i linien:
      msg($chan, "www.boller.nu);
Avatar billede impulze Nybegynder
02. januar 2009 - 01:00 #2
Det troede jeg også, men der kommer den op med denne fejl "Parse error: syntax error, unexpected $end"
Avatar billede erikjacobsen Ekspert
02. januar 2009 - 09:52 #3
Fordi vi retter een fejl, så kan der jo godt være en anden, ik'?

Den nye fejlbesked plejer at betyde, at du har rod i dine krølleparentesere: { ... }
Avatar billede impulze Nybegynder
03. januar 2009 - 17:23 #4
Ja, det kan jeg regne ud.
Her er scripet, måske kan du eller en anden ekspert se fejlen, for jeg kan ikke finde den..

Og det er linje 118 fejlen kommer. Så det er et eller andet før den linje, hvor enten jeg har slettet et tegn eller mangler tilføje et...


<?
$configfile = "c-stat.conf";
if (file_exists("eth0-stats.conf")) { $configfile = "c-stat.conf"; }
$confighandle = fopen($configfile, "r");
while ($line = fgets($confighandle)) {
    $x = explode(":", str_replace("\r", "", str_replace("\n", "", $line)));
    $z = $x[0];
    $conf[$z] = $x[1];
    echo $conf[$z]."\n";
}
$mysql = mysql_connect($conf[mysql_addr], $conf[mysql_user], $conf[mysql_pass]);
mysql_select_db($conf[mysql_db]);
while (1) {
    $sock = fsockopen($conf[server], $conf[port]);
    if ($sock) {
        raw("USER bollernu \"\" NEW: bollerstats : author: boller");
        raw("NICK $conf[nick]"); $me = $conf[nick];
    }
    while ($sock) {
        while ($buffer = fgets($sock)) {
            $buffer = str_replace("\r", "", $buffer);
            $buffer = str_replace("\n", "", $buffer);
            $arg = explode(" ", $buffer);
            $host = substr($buffer, 1, -1); $x = explode("!", $host); $nick = $x[0];
            $userathost = $x[1]; $x = explode("@", $userathost);
            $user = $x[0]; $domain = $x[1]; $chan = str_replace(":", "", $arg[2]); $msg = "";
            $i = 3; while ($arg[$i]) { $msg = $msg." ".$arg[$i]; $i++; }
            $msg = substr($msg, 2); $time = time();
            if ($arg[1] == "NICK") {
    if ($nick == $me) { $me = str_replace(":", "", $arg[2]); }
    $q = "INSERT INTO `log`
    (`time`, `network`, `event`, `chan`, `nick`, `sentence`)
    VALUES('$time', '$conf[network]', 'NICK', '$chan', '$nick', '');";
    mysql_query($q);}
        if ($arg[0] == "PING") {
        raw("PONG ".$arg[1]);
        if ($me != $conf[nick]) { raw("NICK $conf[nick]"); }
        raw("JOIN $conf[autojoin]");
        }
        if ($arg[1] == "376") {
        raw("JOIN $conf[autojoin]");
        }
        if ($arg[1] == "433") {
        raw("NICK ".$conf[nick]."-".rand(1,99));
        }
        if ($arg[6] == "owned" && $nick == "ImpulzE") { msg("ImpulzE", "IDENTIFY $conf[nickpass]"); }
        if ($arg[1] == "JOIN") {
        $q = "INSERT INTO `log` (`time`, `network`, `event`, `chan`, `nick`, `sentence`)
        VALUES('$time', '$conf[network]', 'JOIN', '$chan', '$nick', '');";
        mysql_query($q);
        }
        if ($arg[1] == "QUIT") {
        $q = "INSERT INTO `log`    (`time`, `network`, `event`, `chan`, `nick`, `sentence`)
        VALUES('$time', '$conf[network]', 'QUIT', '', '$nick', '$msg');";
        mysql_query($q);
        if ($arg[1] == "KICK") {
        $q = "INSERT INTO `log`    (`time`, `network`, `event`, `chan`, `nick`, `sentence`)
        VALUES('$time', '$conf[network]', 'KICK', '', '$nick', '$msg');";
        mysql_query($q);
        }
        if ($arg[1] == "TOPIC") {
        $q = "INSERT INTO `log`    (`time`, `network`, `event`, `chan`, `nick`, `sentence`)
        VALUES('$time', '$conf[network]', 'TOPIC', '$chan', '$nick', '$msg');";
                mysql_query($q);
        }
    if ($arg[1] == "PRIVMSG") {
    if ($arg[2]{0} == "#") {
    echo "<$nick@$chan> $msg\n";
    $q = "INSERT INTO `log`    (`time`, `network`, `event`, `chan`, `nick`, `sentence`)
    VALUES('$time', '$conf[network]', 'PRIVMSG', '$chan', '$nick', '$msg');";
    mysql_query($q);
    if ($arg[3] == ":!conf") {
    $x = $arg[4];
    msg($chan, "conf: ".$conf[$x]);
    }
    if ($arg[3] == ":!hp") {
    msg($chan, "www.boller.nu");
    }
    if ($arg[3] == ":!quit") {
    msg($chan, "/quit");
    }
    if ($arg[3] == ":!stats") {
    $mtime = microtime();
    if ($arg[4]) { $x = $arg[4]; }
    else { $x = $nick; }
    $r = mysql_query("SELECT * FROM `log` WHERE `event` = 'PRIVMSG' AND `nick` LIKE '$x' AND `chan` LIKE '$chan';");
    $words = 0; $letters = 0;
    while ($line = mysql_fetch_array($r)) {
    $words += count(explode(" ", $line[sentence]));
    $letters += strlen($line[sentence]);
    }
$lines = mysql_num_rows($r);
$r = mysql_query("SELECT nick FROM `log` WHERE `chan` LIKE '$chan' AND `event` LIKE 'PRIVMSG';");
$class = "";
if (!mysql_num_rows(mysql_query("SELECT * FROM `log` WHERE `nick` LIKE '$x' AND `chan` LIKE '$chan'"))) { msg($chan, "[$x] der er ingen database oprettet under $chan"); }
    else {
while ($line = mysql_fetch_array($r)) {
$z = $line[nick];
$class[$z] += 1;
}
$n = 1;
foreach ($class as $nick_ => $number_) { if ($number_ > $lines) { $n++; } }
msg($chan, "Hej ".$x.". Her er nogle hurtige stats - Total antal af ord: ".$words." og tegn: ".$letters." - Gennemsnit: ".round(($words / $lines),2));
msg($chan, "Find flere stats på: http://boller.nu/ircstats/?chan=".str_replace("#", "", $chan));
}}}}}}
fclose($sock);
    sleep(1);
}
function msg($tmp, $tmp2) {
    global $sock; fputs($sock, "PRIVMSG ".$tmp." :".$tmp2."\n");
}
function notice($tmp, $tmp2) {
    global $sock; fputs($sock, "NOTICE ".$tmp." :".$tmp2."\n");
}
function raw($raw) {
    global $sock; fputs($sock, $raw."\n");
}
?>
Avatar billede erikjacobsen Ekspert
03. januar 2009 - 17:29 #5
Lav indrykninger, der passer til {...} strukturen. Så kan du sikkert selv finde en fejl et sted.
Avatar billede impulze Nybegynder
16. december 2015 - 13:23 #6
Lukker.
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