Advertisement
Guest User

Untitled

a guest
May 6th, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 17.70 KB | None | 0 0
  1. <?php
  2.  
  3. class aMessage {
  4.     var $nick, $user, $host, $sender, $cmd, $param, $mess, $wline;
  5. }
  6.  
  7. class aIRC {
  8.     var $cM, $lastping, $pongwait, $pingsent, $host, $port, $cNick, $debug, $oldNick, $joinnick, $username, $logfile, $realname, $joinchan, $con, $auth, $firstcon, $mTableName, $cTableName, $server, $cmdChar, $locked, $pingpong, $masterNick, $quit, $MySQLServer, $MySQLDatabase, $MySQLAccountName, $MySQLAccountpassword;
  9. }
  10.  
  11. $IRC = new aIRC;
  12. $IRC->cM = new aMessage;
  13. $IRC->cM->param = array();
  14. $IRC->host = "super.talkflack.com"; //irc.freenode.net
  15. $IRC->port = 6667;
  16. $IRC->joinchan = array("#Tootoot222", "#SRL", "#mixster", "#SRL-School");
  17. $IRC->joinnick = "Furry";
  18. $IRC->username = "Furry";
  19. $IRC->realname = "Furry";
  20. $IRC->cNick = $IRC->joinnick;
  21. $IRC->oldNick = $IRC->joinnick . "_";
  22. $IRC->auth = "";
  23. $IRC->server = "";
  24. $IRC->cmdChar = "!";
  25. $IRC->locked = false;
  26. $IRC->debug = false;
  27. $IRC->pingpong = false;
  28.  
  29. $IRC->MySQLServer = "localhost";   
  30. $IRC->MySQLDatabase = "ircbotv2";
  31. $IRC->MySQLAccountName = "root";
  32. $IRC->MySQLAccountpassword = "";
  33. $IRC->mTableName = "masters4";
  34. $IRC->iTableName = "imasters";
  35. $IRC->cTableName = "cmd2";
  36.  
  37. $IRC->logfile = fopen("logfile.txt", "a");
  38. fwrite($IRC->logfile, "\r\n*** Log opened on " . date("D M jS H:i:s", time()) . " ***\r\n\r\n");
  39.  
  40. function output($message) {
  41.     global $IRC;
  42.     $out = "[" . date("H:i:s") . "] " . $message . "\r\n";
  43.     echo($out);
  44.     fwrite($IRC->logfile, $out);
  45. }
  46.  
  47. function send($data, $out = true) {
  48.     if(!trim($data)) {
  49.       return;
  50.     }
  51.     global $IRC;
  52.     $a = explode("\r\n", $data);
  53.     foreach($a as $aa) {
  54.         fputs($IRC->fp, $aa . "\r\n");
  55.         if($out) {
  56.             output("-> " . $aa);
  57.         }
  58.     }
  59. }
  60.  
  61. function startsWith($haystack, $needle) {
  62.     if(is_array($needle)) {
  63.         foreach($needle as $n) {
  64.             if(strpos($haystack, $n) === 0) {
  65.                 return($n);
  66.             }
  67.         }
  68.     }
  69.     return(strpos($haystack, $needle) === 0);
  70. }
  71.  
  72. function instr($haystack, $needle) {
  73.     return((strpos($haystack, $needle) != 0) || (strpos($haystack, $needle) === 0));
  74. }
  75.  
  76. function isNumber($s) {
  77.     $l = sizeof($s);
  78.     if($l == 0) {
  79.         return false;
  80.     }
  81.     if($s[0] == "-") {
  82.         $s = substr($s, 1);
  83.     }
  84.     for($i = 0; $i < $l; $i++) {
  85.         if(!in_array($s[$i], array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9"))) {
  86.             return false;
  87.         }
  88.     }
  89.     return true;
  90. }
  91.  
  92. function dumpDB($header) {
  93.     global $IRC;
  94.     if(!file_exists("./DB_backup/")) {
  95.         mkdir("./DB_backup/");
  96.     }
  97.     $basename = "db_backup";
  98.     $n = 1;
  99.     while(file_exists($filename = ("./DB_backup/" . $basename . $n . ".txt"))) {
  100.         $n++;
  101.     }
  102.     if(!$fh = fopen($filename, 'w')) {
  103.         return("failed to open file: " . $filename);
  104.     }
  105.     fwrite($fh, "//Dumpfile " . $n . " created on " . date("D M jS H:i:s", time()) . "\r\n\r\n");
  106.     if($header) {
  107.         fwrite($fh, $header . "\r\n\r\n\r\n");
  108.     }
  109.     $q = mysql_query("SELECT * FROM " . $IRC->cTableName . " ORDER BY name ASC", $IRC->con);
  110.     while($row = mysql_fetch_array($q)) {
  111.         fwrite($fh, "//" . strtoupper($row["name"]) . ":\r\n" . $row["code"] . "\r\n\r\n\r\n");
  112.     }
  113.     fclose($fh);
  114.     return(true);
  115. }
  116.  
  117. function fetchcmdcode($cmd) {
  118.     global $IRC;
  119.     $row = mysql_fetch_array(mysql_query("SELECT code FROM " . $IRC->cTableName . " WHERE name='" . $cmd . "'", $IRC->con));
  120.     return($row["code"]);
  121. }
  122.  
  123. function evalbound($cmd) {
  124.     eval(fetchcmdcode(strtoupper($cmd)));
  125. }
  126.  
  127. function fetchmasters($sel = true, $item = "*", $privs = 1, $ins = false, $upd = false, $new = "") {
  128.     global $IRC;
  129.     if($sel) {
  130.         $q = mysql_query("SELECT " . $item . " FROM " . $IRC->mTableName, $IRC->con);
  131.         $r = array();
  132.         while($row = mysql_fetch_array($q)) {
  133.             $r[] = $row["name"];
  134.         }
  135.     }elseif($ins) {
  136.         mysql_query("INSERT INTO " . $IRC->mTableName . "(name, name, privs) VALUES ('" . $item . "', '" . strtoupper($item) . "', " . $privs . ")", $IRC->con);
  137.     }elseif($upd) {
  138.         mysql_query("UPDATE " . $IRC->mTableName . " SET name='" . $new . "', name='" . strtoupper($new) . "' WHERE name='" . strtoupper($item) . "'");
  139.     }else {
  140.         if($item) {
  141.             $n = " WHERE name='" . strtoupper($item) . "'";
  142.         }
  143.         mysql_query("DELETE FROM " . $IRC->mTableName . $n, $IRC->con);
  144.     }
  145.     return($r);
  146. }
  147.  
  148. function isMaster($nick) {
  149.     global $IRC;
  150.     foreach(($IRC->masterNick = fetchmasters()) as $n) {
  151.         if(strtolower($n) == strtolower($nick)) {
  152.             return(true);
  153.         }
  154.     }
  155.     return(false);
  156. }
  157.  
  158. function setnick($newnick) {
  159.  
  160. }
  161.  
  162. function privmsg($channel, $message) {
  163.    
  164. }
  165.  
  166. function handleNumberCommands() {
  167.     global $IRC;
  168.     switch($IRC->cM->cmd) {
  169.         case "001":
  170.             $IRC->server = $IRC->cM->host;
  171.             output($IRC->cM->mess);
  172.             if($IRC->firstcon) {
  173.                 send("NICK :" . $IRC->joinnick);
  174.                 $IRC->cNick = $IRC->joinnick;
  175.                 send("PRIVMSG NickServ :ID " . $IRC->joinnick . " " . $IRC->auth);
  176.                 foreach($IRC->joinchan as $c) {
  177.                     send("JOIN " . $c);
  178.                 }
  179.                 $IRC->firstcon = false;
  180.             }
  181.             break;
  182.         case "005":
  183.         case "252":
  184.         case "254":
  185.             output(trim($IRC->cM->param[0], $IRC->cNick . " ") . " " . $IRC->cM->mess);
  186.             break;
  187.         case "332":
  188.             output("Topic for " . $IRC->cM->param[1] . " is: " . $IRC->cM->mess);
  189.             break;
  190.         case "333":
  191.             output("Topic for " . $IRC->cM->param[1] . " set by " . $IRC->cM->param[2] . " on " . date("D M jS H:i:s", $IRC->cM->param[3]));
  192.             break;
  193.         case "421":
  194.             output("Unknown command: \"" . $IRC->cM->param[1] . "\"");
  195.             break;
  196.         case '433':
  197.             output("Nickname \"" . $IRC->cM->param[1] . "\" is already in use.");
  198.             $IRC->cNick = $IRC->oldNick;
  199.             if($IRC->firstcon) {
  200.                 send("NICK :" . $IRC->joinnick . rand(100, 999));
  201.                 $IRC->cNick = $IRC->joinnick;
  202.                 send("PRIVMSG NickServ :ghost " . $IRC->joinnick . " " . $IRC->auth);
  203.             }          
  204.             break;
  205.         case '474':
  206.             output('Unable to join channel ' . $IRC->cM->param[1] . ': ' . $IRC->cM->mess);
  207.             break;
  208.         default:
  209.             output($IRC->cM->mess);
  210.             break;
  211.     }
  212.     return true;
  213. }
  214.  
  215. function handleBotCommands() {
  216.     global $IRC;
  217.     if((startsWith($IRC->cM->mess, $IRC->cmdChar)) && (strlen($IRC->cM->mess) > strlen($IRC->cmdChar)) /*&& (strtolower($IRC->cM->nick) != strtolower($IRC->cNick))*/) {
  218.         $ismaster = isMaster($IRC->cM->nick);
  219.         $ispm = strtolower($IRC->cM->param[0]) == strtolower($IRC->cNick);
  220.         if((!$IRC->locked) || ($ismaster)) {
  221.             $a = explode(" ", substr($IRC->cM->mess, strlen($IRC->cmdChar)));
  222.             /*for($i = 1; $i < sizeof($a); $i++) {
  223.                 $r = $r . $a[$i] . " ";
  224.             }
  225.             $r = trim($r);*/
  226.             if($p = strpos($IRC->cM->mess, " ")) {
  227.                 $r = substr($IRC->cM->mess, $p + 1);
  228.             }
  229.             eval(fetchcmdcode(strtoupper($a[0])));
  230.             if($ismaster) {
  231.                 switch(strtoupper($a[0])) {
  232.                     case "BIND":
  233.                         switch(strtoupper($a[1])) {
  234.                             case "ADD":
  235.                                 for($i = 3; $i < sizeof($a); $i++) {
  236.                                     $o = $o . $a[$i] . " ";
  237.                                 }
  238.                                 $o = trim($o);
  239.                                 if(!$o) {
  240.                                     break;
  241.                                 }
  242.                                 send("PRIVMSG " . $IRC->cM->param[0] . " :Binding command " . strtoupper($a[2]));
  243.                                 dumpDB("//" . $IRC->cM->nick . "; Binding command " . strtoupper($a[2]) . "\r\n\r\n//Old code:\r\n" . fetchcmdcode(strtoupper($a[2])) . "\r\n\r\n//New code:\r\n" . $o);
  244.                                 mysql_query("DELETE FROM " . $IRC->cTableName . " WHERE name='" . strtoupper($a[2]) . "'", $IRC->con);
  245.                                 mysql_query("INSERT INTO " . $IRC->cTableName . "(name, code) VALUES ('" . strtoupper($a[2]) . "', '" . $o . "')", $IRC->con);
  246.                                 break;
  247.                             case "DEL":
  248.                                 dumpDB("//" . $IRC->cM->nick . "; Deleting command " . strtoupper($a[2]) . "\r\n\r\n//Old code:\r\n" . fetchcmdcode(strtoupper($a[2])));
  249.                                 mysql_query("DELETE FROM " . $IRC->cTableName . " WHERE name='" . strtoupper($a[2]) . "'", $IRC->con);
  250.                                 send("PRIVMSG " . $IRC->cM->param[0] . " :Command '" . strtoupper($a[2]) . "' was deleted.");
  251.                                 break;
  252.                             case "REN":
  253.                                 if(!(sizeof($a) > 3) ) {
  254.                                     break;
  255.                                 }
  256.                                 $h = "//" . $IRC->cM->nick . "; Renaming command \"" . strtoupper($a[2]) . "\" to \"" . strtoupper($a[3]) . "\"";
  257.                                 if($c = fetchcmdcode(strtoupper($a[2]))) {
  258.                                     $h = $h . "\r\nDeleting old code:\r\n" . $c;
  259.                                     mysql_query("DELETE FROM " . $IRC->cTableName . " WHERE name='" . strtoupper($a[3]) . "'", $IRC->con);
  260.                                 }
  261.                                 dumpDB($h);
  262.                                 mysql_query("UPDATE " . $IRC->cTableName . " SET name='" . strtoupper($a[3]) . "' WHERE name='" . strtoupper($a[2]) . "'");
  263.                                 send("PRIVMSG " . $IRC->cM->param[0] . " :Command '" . strtoupper($a[2]) . "' was renamed to '" . strtoupper($a[3]) . "'.");
  264.                                 break;
  265.                             case "LNK":
  266.                                 send("PRIVMSG " . $IRC->cM->param[0] . " :Linking command " . strtoupper($a[2]) . " to " . strtoupper($a[3]));
  267.                                 dumpDB("//" . $IRC->cM->nick . "; Linking command " . strtoupper($a[2]) . " to " . strtoupper($a[3]));
  268.                                 mysql_query("DELETE FROM " . $IRC->cTableName . " WHERE name='" . strtoupper($a[3]) . "'", $IRC->con);
  269.                                 mysql_query("INSERT INTO " . $IRC->cTableName . "(name, code) VALUES ('" . strtoupper($a[3]) . "', 'evalbound(\"" . $a[2] . "\");')", $IRC->con);
  270.                                 break;
  271.                             case "APP":
  272.                                 for($i = 3; $i < sizeof($a); $i++) {
  273.                                     $o = $o . $a[$i] . " ";
  274.                                 }
  275.                                 $o = trim($o);
  276.                                 if(!$o) {
  277.                                     break;
  278.                                 }
  279.                                 send("PRIVMSG " . $IRC->cM->param[0] . " :Appending command " . strtoupper($a[2]));
  280.                                 dumpDB("//" . $IRC->cM->nick . "; Appending command " . strtoupper($a[2]) . "\r\n\r\n//Old code:\r\n" . $co = fetchcmdcode(strtoupper($a[2])) . "\r\n\r\n//Appending:\r\n" . $o);
  281.                                 mysql_query("DELETE FROM " . $IRC->cTableName . " WHERE name='" . strtoupper($a[3]) . "'", $IRC->con);
  282.                                 mysql_query("INSERT INTO " . $IRC->cTableName . "(name, code) VALUES ('" . strtoupper($a[3]) . "', '" . $co . $o . "')", $IRC->con);
  283.                                 break;
  284.                         }
  285.                         break;
  286.                 }
  287.             }
  288.         }
  289.     }
  290. }
  291.  
  292. function handleChatCommands() {
  293.     global $IRC;
  294.     if(!$IRC->cM->nick) {
  295.         return false;
  296.     }
  297.     $chr1 = chr(001);
  298.     if((startsWith($IRC->cM->mess[0], $chr1)) && ($IRC->cM->mess[strlen($IRC->cM->mess) - 1] == $chr1)) {
  299.         $a = explode(" ", $IRC->cM->mess);
  300.         $tok = "";
  301.         for($i = 1; $i < sizeof($a); $i++) {
  302.             $tok = $tok . $a[$i] . " ";
  303.         }
  304.         $tok = trim(substr($tok, 0, strlen($tok) - 1));
  305.         if($tok) {
  306.             $tok2 = strtoupper(substr($a[0], 1));
  307.             if($tok2 != "ACTION") {
  308.                 $tok = ": " . $tok;
  309.             }
  310.         }else {
  311.             $tok2 = strtoupper(substr($a[0], 1, strlen($tok2) - 1));
  312.         }
  313.         if($tok2 != "ACTION") {
  314.             output($IRC->cM->nick . " [" . $IRC->cM->user . "@" . $IRC->cM->host . "] requested CTCP " . $tok2 . " from " . $IRC->cM->param[0] . $tok);
  315.         }
  316.         switch($tok2) {
  317.             case "ACTION":
  318.                 output("[" . $IRC->cM->param[0] . "] * " . $IRC->cM->nick . " " . $tok);
  319.                 break;
  320.             case "PING":
  321.                 send("NOTICE " . $IRC->cM->nick . " :" . $chr1 . "PING " . time() . $chr1);
  322.                 break;
  323.             case "TIME":
  324.                 send("NOTICE " . $IRC->cM->nick . " :" . $chr1 . "TIME " . date("D M jS H:i:s") . $chr1);
  325.                 break;
  326.             case "VERSION":
  327.                 send("NOTICE " . $IRC->cM->nick . " :" . $chr1 . "VERSION Toot PHP Bot v2" . $chr1);
  328.                 break;
  329.             case "FINGER":
  330.                 send("NOTICE " . $IRC->cM->nick . " :" . $chr1 . "FINGER wat" . $chr1);
  331.                 break;
  332.         }
  333.         return true;
  334.     }
  335.     if(strtolower($IRC->cM->param[0]) != strtolower($IRC->cNick)) {
  336.         output("[" . $IRC->cM->param[0] . "] <" . $IRC->cM->nick . "> " . $IRC->cM->mess);
  337.     }else {
  338.         output("*" . $IRC->cM->nick . "* " . $IRC->cM->mess);
  339.     }
  340.     if(startsWith($IRC->cM->mess, $IRC->cmdChar)) {
  341.         handleBotCommands();
  342.     }
  343.     return true;
  344. }
  345.  
  346. function handleNormalCommands() {
  347.     global $IRC;
  348.     switch(strtoupper(trim($IRC->cM->cmd))) {
  349.         case "KICK":
  350.             if($IRC->cM->param[1] == $IRC->cNick) {
  351.                 $who = "You were";
  352.             }else {
  353.                 $who = $IRC->cM->param[1] . " was";
  354.             }
  355.             output("-!- " . $who . " kicked from " . $IRC->cM->param[0] . " by " . $IRC->cM->nick . " [" . $IRC->cM->mess . "]");
  356.             if($IRC->cM->param[1] == $IRC->cNick) {
  357.                 send("JOIN :" . $IRC->cM->param[0]);
  358.             }
  359.             break;
  360.         case "MODE":
  361.             $t = array();
  362.             if(strtolower($IRC->cNick) == strtolower($IRC->cM->param[0])) {
  363.                 $o = $IRC->cM->mess;
  364.             }else {
  365.                 for($i = 1; $i < sizeof($IRC->cM->param); $i++) {
  366.                     $o = $o . $IRC->cM->param[$i] . " ";
  367.                 }
  368.                 $o = trim($o);
  369.             }
  370.             if($IRC->cM->nick) {
  371.                 output("-!- mode/" . $IRC->cM->param[0] . " [" . $o . "] by " . $IRC->cM->nick);
  372.             }else {
  373.                 output("-!- mode/" . $IRC->cM->param[0] . " [" . $o . "] by " . $IRC->cM->host);
  374.             }
  375.             break;
  376.         case "NOTICE":
  377.             output("-" . $IRC->cM->nick . " [" . $IRC->cM->user . "@" . $IRC->cM->host . "]- " . $IRC->cM->mess);
  378.             break;
  379.         case "PRIVMSG":
  380.             return handleChatCommands();
  381.         case "PART":
  382.             output("-!- " . $IRC->cM->nick . " [" . $IRC->cM->user . "@" . $IRC->cM->host . "] has left " . $IRC->cM->param[0] . " [" . $IRC->cM->mess . "]");
  383.             break;
  384.         case "JOIN":
  385.             output("-!- " . $IRC->cM->nick . " [" . $IRC->cM->user . "@" . $IRC->cM->host . "] has joined " . $IRC->cM->mess);
  386.             break;
  387.         case "QUIT":
  388.             output("-!- " . $IRC->cM->nick . " [" . $IRC->cM->user . "@" . $IRC->cM->host . "] has quit [" . $IRC->cM->mess . "]");
  389.             break;
  390.         case "NICK":
  391.             if(strtolower($IRC->cM->mess) == strtolower($IRC->cNick)) {
  392.                 $who = "You are";
  393.                 $IRC->cNick = $IRC->cM->mess;
  394.             }else {
  395.                 $who = $IRC->cM->nick . " is";
  396.             }
  397.             output("-!- " . $who . " now known as " . $IRC->cM->mess);
  398.             if(isMaster($IRC->cM->nick)) {
  399.                 foreach(($IRC->masterNick = fetchmasters()) as $n) {
  400.                     if(strtolower($n) == strtolower($IRC->cM->nick)) {
  401.                         mysql_query("UPDATE " . $IRC->mTableName . " SET name='" . $IRC->cM->mess . "', name='" . strtoupper($IRC->cM->mess) . "' WHERE name='" . strtoupper($n) . "'");
  402.                     }
  403.                 }
  404.             }
  405.             if(strtolower($IRC->cM->nick) == strtolower($IRC->cNick)) {
  406.                 $IRC->cNick = $IRC->cM->mess;
  407.             }
  408.             break;
  409.         case "TOPIC":
  410.             output("-!- " . $IRC->cM->nick . " changed the topic of " . $IRC->cM->param[0] . " to: " . $IRC->cM->mess);
  411.             break;
  412.         case "PONG":
  413.             if($IRC->pingpong) {
  414.                 output("-!- Server PONG reply from " . $IRC->cM->host . ": " . $IRC->cM->param[0] . "; Time since PING request sent: " . (microtime(true) - $IRC->pingsent));
  415.             }
  416.             $IRC->lastping = time();
  417.             $IRC->pongwait = false;
  418.             break;
  419.         default:
  420.             return false;
  421.     }
  422.     return true;
  423. }
  424.  
  425. function parseMessage($buffer) {
  426.     global $IRC;
  427.     $a = explode("\n", $buffer);
  428.     foreach($a as $rawdata) {
  429.         if(!($IRC->cM->wline = trim($rawdata))) {
  430.             return;
  431.         }
  432.         switch($s = startsWith(strtoupper($IRC->cM->wline), array(":", "NOTICE", "PING", "ERROR"))) {
  433.             case ":":
  434.                 $IRC->cM->host = substr($IRC->cM->mess = substr($IRC->cM->wline, 1), 0, $p = strpos($IRC->cM->mess, " "));
  435.                 $IRC->cM->mess = substr($IRC->cM->mess, $p + 1);
  436.                 if(($p = strpos($IRC->cM->host, "!")) || ($p === 0)) {
  437.                     $IRC->cM->nick = substr($IRC->cM->host, 0, $p);
  438.                     $IRC->cM->host = substr($IRC->cM->host, $p + 1);
  439.                     if(($p = strpos($IRC->cM->host, "@")) || ($p === 0)) {
  440.                         $IRC->cM->user = substr($IRC->cM->host, 0, $p);
  441.                         $IRC->cM->host = substr($IRC->cM->host, $p + 1);
  442.                     }
  443.                 }
  444.                 $IRC->cM->cmd = substr($IRC->cM->mess, 0, $p = strpos($IRC->cM->mess, " "));
  445.                 $IRC->cM->mess = substr($IRC->cM->mess, $p + 1);
  446.                 if(!(($p = strpos($IRC->cM->mess, ":")) || ($p === 0))) {
  447.                     $p = strlen($IRC->cM->mess);
  448.                 }
  449.                 $IRC->cM->param = explode(" ", trim(substr($IRC->cM->mess, 0, $p)));
  450.                 $IRC->cM->mess = substr($IRC->cM->mess, $p + 1);
  451.                 if(isNumber($IRC->cM->cmd)) {
  452.                     if(handleNumberCommands()) {
  453.                         break;
  454.                     }
  455.                 }
  456.                 if(handleNormalCommands()) {
  457.                     break;
  458.                 }
  459.                 output("Unknown message: " . $IRC->cM->wline);
  460.                 break;
  461.             case "NOTICE":
  462.                 $IRC->cM->mess = substr($IRC->cM->wline, strpos($IRC->cM->wline, ":") + 1);
  463.                 $ss = $IRC->server;
  464.                 if(startsWith(strtoupper($IRC->cM->wline), "NOTICE AUTH")) {
  465.                     $ss = $IRC->host;
  466.                 }
  467.                 output("!" . $ss . " " . $IRC->cM->mess);
  468.                 break;
  469.             case "PING":
  470.                 if($IRC->pingpong) {
  471.                     output($rawdata);
  472.                 }
  473.                 $IRC->cM->wline[1] = "O";
  474.                 send($IRC->cM->wline, $IRC->pingpong);
  475.                 break;
  476.             case "ERROR":
  477.                 output($IRC->cM->wline);
  478.                 break;
  479.             default:
  480.                 output("Unknown message: " . $IRC->cM->wline);
  481.                 break;
  482.         }
  483.     }
  484. }
  485.  
  486. function onConnect() {
  487.     global $IRC;
  488.     send("USER " . $IRC->username . " * * :" . $IRC->realname);
  489.     send("NICK " . $IRC->joinnick);
  490.     $IRC->cNick = $IRC->joinnick;
  491.     if($IRC->auth) {
  492.         send("PRIVMSG NickServ :ID " . $IRC->joinnick . " " . $IRC->auth);
  493.     }
  494.     foreach($IRC->joinchan as $c) {
  495.         send("JOIN " . $c);
  496.     }
  497. }
  498.  
  499. if(!$IRC->con = mysql_connect($IRC->MySQLServer, $IRC->MySQLAccountName, $IRC->MySQLAccountpassword)){
  500.     output("MySQL error in fetchcmdcode: " . mysql_error());
  501.     mysql_close($IRC->con);
  502.     die;
  503. }
  504. mysql_select_db($IRC->MySQLDatabase, $IRC->con);
  505.  
  506. $IRC->connected = false;
  507. $IRC->lastping = time();
  508. $IRC->pongwait = false;
  509. $IRC->pingsent = microtime(true);
  510. $IRC->masterNick = fetchmasters();
  511.    
  512. while(!$IRC->quit) {
  513.     if((($IRC->pongwait) && ((time() - $IRC->lastping) > 300)) || ((!$IRC->connected) || (feof($IRC->fp) && (!($IRC->quit))))) {
  514.         if($IRC->connected) {
  515.             if(!feof($IRC->fp)) {
  516.                 send("QUIT :Lost connection");
  517.             }
  518.             fclose($IRC->fp);
  519.         }
  520.         $IRC->connected = false;
  521.         output("-!- Attempting to open connection to " . $IRC->host . ":" . $IRC->port);
  522.         if($IRC->fp = fsockopen($IRC->host, $IRC->port, $errno, $errdesc)) {
  523.             $IRC->firstcon = true;
  524.             output("-!- Connection established to " . $IRC->host . ":" . $IRC->port);
  525.             $IRC->connected = true;
  526.             onConnect();
  527.             $IRC->lastping = time();
  528.             $IRC->pongwait = false;
  529.         }else {
  530.             sleep(30);
  531.             continue;
  532.         }
  533.     }
  534.     if((!$IRC->pongwait) && (time() - $IRC->lastping) > 30) {
  535.         $IRC->pongwait = true;
  536.         $IRC->pingsent = microtime(true);
  537.         send("PING :" . $IRC->server, $IRC->pingpong);
  538.     }
  539.     if($rawdata = fgets($IRC->fp, 1024)) {
  540.         if($IRC->debug) {
  541.             output($rawdata);
  542.         }
  543.         parseMessage($rawdata);
  544.     }
  545. }
  546. fclose($IRC->fp);
  547. fclose($IRC->logfile);
  548. mysql_close($IRC->con);
  549. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement