Jump to content

User:Iamthe7DeadlySins/MyBot

From Meta, a Wikimedia project coordination wiki

<script type="text/javascript"> <?PHP

       declare(ticks = 1);
       function sig_handler($signo) {
               switch ($signo) {
                       case SIGCHLD:
                               while (($x = pcntl_waitpid(0, $status, WNOHANG)) != -1) {
                                       if ($x == 0) break;
                                       $status = pcntl_wexitstatus($status);
                               }
                               break;
               }
       }
       pcntl_signal(SIGCHLD,   "sig_handler");
       function score ($list,$data,&$matches = null) {
               $ret = 0;
               foreach ($list as $preg => $pts) {
                       if ($x = preg_match_all($preg.'S',$data,$m)) {

// echo $x.'*'.$pts.' ('.$preg.')'."\n";

                               $matches[$preg] = $x;
                               $ret += $pts * $x;
                       }
               }

// echo 'Score: '.$ret."\n";

               return $ret;
       }
       include '../diff.function.php'; /* The diff function. */
       include '../wikibot.classes.php'; /* The wikipedia classes. */
       include 'cluebot.config.php'; /* This file is very simple, but it contains sensitive information, we just define $user, $ircserver, $ircport, $ircchannel, $pass, $owner, and $status. */
       include 'cluebot.scorelist.php'; /* This file is uploaded as well as the main file. */
       $wpapi  = new wiktionaryapi;
       $wpq    = new wiktionaryquery;
       $wpi    = new wiktionaryindex;
       
       $wpapi->login($user,$pass);
       $mysql = mysql_pconnect($mysqlhost.':'.$mysqlport,$mysqluser,$mysqlpass);
       if (!$mysql) { die('Could not connect: ' . mysql_error()); }
       if (!mysql_select_db($mysqldb, $mysql)) { die ('Can\'t use database : ' . mysql_error()); }
       $ircconfig = explode("\n",$wpq->getpage('User:'.$owner.'/CBChannels.js'));
       $tmp = array();
       foreach($ircconfig as $tmpline) { if (substr($tmpline,0,1) != '#') { $tmpline = explode('=',$tmpline,2); $tmp[trim($tmpline[0])] = trim($tmpline[1]); } }
       $ircchannel = $tmp['ircchannel'];
       $ircdebugchannel = $tmp['ircdebugchannel'];
       $ircreportchannel = $tmp['ircreportchannel'];
       $ircvandalismchannel = $tmp['ircvandalismchannel'];
       $ircaivchannel = $tmp['ircaivchannel'];
       $irctechchannel = $tmp['irctechchannel'];
       $ircproxychannels = $tmp['ircproxychannels'];
       $ircunrevertedchannels = $tmp['ircunrevertedchannels'];
       $ircbagtrialchannels = $tmp['ircbagtrialchannels'];
       $ircotherchannels = $tmp['ircotherchannels'];
       unset($tmp,$tmpline);
       $stalkbots = array();
       $trialbots = explode("\n",$wpq->getpage('Wikipedia:Bots/Requests for approval'));
       foreach ($trialbots as $trialbot) if (preg_match('/\{\{BRFA\|(.*)\|.*\|Trial\}\}/',str_replace(array("\n","\r"),,$trialbot),$m)) $stalkbots[$m[1]] = 1;
       $irc = fsockopen($ircserver,$ircport,$ircerrno,$ircerrstr,15);
       $ircpid = pcntl_fork();
       if ($ircpid == 0) {
               fwrite($irc,'PASS '.$ircpass."\n");
               fwrite($irc,'USER '.$user.' "1" "1" :Sinbot Wiktionary Bot.'."\n");
               fwrite($irc,'NICK '.$user."\n");
               while (!feof($irc)) {
                       $data = str_replace(array("\n","\r"),,fgets($irc,1024));

// echo 'IRC: '.$data."\n";

                       $d = explode(' ',$data);
                       if (strtolower($d[0]) == 'ping') {
                               fwrite($irc,'PONG '.$d[1]."\n");
                       } elseif (($d[1] == '376') or ($d[1] == '422')) {

// fwrite($irc,'PRIVMSG NickServ :identify '.$pass."\n"); // sleep(2);

                               fwrite($irc,'JOIN '.$ircchannel.','.$ircdebugchannel.','.$ircreportchannel.','.$ircvandalismchannel.','.$ircaivchannel.','.$irctechchannel.','.$ircproxychannels.','.$ircunrevertedchannels.','.$ircbagtrialchannels.','.$ircotherchannels."\n");
                               foreach (explode(',',$ircchannel) as $y) {
                                       fwrite($irc,'PRIVMSG '.$y.' :IRC logging enabled.'."\n");
                               }
                       } elseif (strtolower($d[1]) == 'privmsg') {
                               if (substr($d[3],0,2) == ':!') {
                                       if (strtolower($d[2]) == '#wikipedia-en') { $tmp = explode('!',substr($d[0],1)); $cmd = 'NOTICE '.$tmp[0]; }
                                       elseif (strtolower($d[2]) == strtolower($user)) { $tmp = explode('!',substr($d[0],1)); $cmd = 'NOTICE '.$tmp[0]; }
                                       else { $cmd = 'PRIVMSG '.$d[2]; }
                                       switch (substr(strtolower($d[3]),2)) {
                                               case 'edit':
                                                       if (preg_match("/\[\[(.*)\]\]/",$data,$m)) {
                                                               $rv = $wpapi->revisions($m[1],1,'older');
                                                               fwrite($irc,$cmd.' :[['.$m[1].']] http://en.wikipedia.org/w/index.php?title='.urlencode($m[1]).'&diff=prev' .
                                                                       '&oldid='.urlencode($rv[0]['revid']).' * '.$rv[0]['user'].' * '.$rv[0]['comment']."\n");
                                                       } else {
                                                               fwrite($irc,$cmd.' :Couldn\'t find link.'."\n");
                                                       }
                                                       break;
                                               case 'stalk':
                                                       if (preg_match("/\[\[User:(.*)\]\]/",$data,$m)) {
                                                               $uc = $wpapi->usercontribs($m[1],1);
                                                               fwrite($irc,$cmd.' :[['.$uc[0]['title'].']] http://en.wikipedia.org/w/index.php?title='.urlencode($uc[0]['title']).'&diff=prev' .
                                                                       '&oldid='.urlencode($uc[0]['revid']).' * '.$m[1].' * '.$uc[0]['comment']."\n");
                                                       } else {
                                                               fwrite($irc,$cmd.' :Couldn\'t find link.'."\n");
                                                       }
                                                       break;
                                               case 'beaten':
                                                       if (preg_match("/\[\[User:(.*)\]\]/",$data,$m)) {
                                                               if (!mysql_ping($mysql)) { $mysql = mysql_pconnect($mysqlhost.':'.$mysqlport,$mysqluser,$mysqlpass); mysql_select_db($mysqldb, $mysql); }
                                                               $x = mysql_fetch_assoc(mysql_query('SELECT COUNT(`id`) AS `count` FROM `beaten` WHERE `user` = \.mysql_real_escape_string($m[1]).'\' GROUP BY `user`'));
                                                               $y = mysql_fetch_assoc(mysql_query('SELECT SQL_CALC_FOUND_ROWS COUNT(`id`) AS `count2` FROM `beaten` GROUP BY `user` HAVING `count2` > \.mysql_real_escape_string($x['count']).'\' LIMIT 1'));
                                                               $z = mysql_fetch_assoc(mysql_query('SELECT FOUND_ROWS() as `ahead`'));
                                                               fwrite($irc,$cmd.' :[[User:'.$m[1].']] has beaten me '.(($x['count'] != )?$x['count']:'0').' times.  There are '.$z['ahead'].' users who have beaten me more times.'."\n");
                                                               unset($x,$y);
                                                       } else {
                                                               fwrite($irc,$cmd.' :Couldn\'t find link.'."\n");
                                                       }
                                                       break;
                                               case 'vandalcount':
                                                       if (preg_match("/\[\[(.*)\]\]/",$data,$m)) {
                                                               $tmp = unserialize(file_get_contents('oftenvandalized.txt'));
                                                               if (isset($tmp[$m[1]])) {
                                                                       fwrite($irc,$cmd.' :[['.$m[1].']] has been vandalized '.count($tmp[$m[1]]).' time(s) in the last 48 hours.'."\n");
                                                               } else {
                                                                       fwrite($irc,$cmd.' :[['.$m[1].']] has not been vandalized in the last 48 hours.'."\n");
                                                               }
                                                       } else {
                                                               fwrite($irc,$cmd.' :Couldn\'t find link.'."\n");
                                                       }
                                                       break;
                                               case 'heuristics':
                                                       include 'cluebot.heuristics.config.php';
                                                       $stats = unserialize(file_get_contents('cluebot.heuristics.stats.txt'));
                                                       fwrite($irc,$cmd.' :I have the following heuristics enabled: '.implode(', ',$heuristics).".\n");
                                                       foreach ($stats as $heuristic => $count) {
                                                               fwrite($irc,$cmd.' :The '.$heuristic.' heuristic has been matched '.$count.' times.'."\n");
                                                       }
                                                       unset($count,$heuristic,$stats,$heuristics);
                                                       break;
                                               case 'status':
                                                       $ov = unserialize(file_get_contents('oftenvandalized.txt'));
                                                       foreach ($ov as $title => $array) {
                                                               if (count($array) == 0) unset($ov[$title]);
                                                       }
                                                       file_put_contents('oftenvandalized.txt',serialize($ov));
                                                       $count = count($ov);
                                                       $titles = unserialize(file_get_contents('titles.txt'));
                                                       foreach ($titles as $title => $time) {
                                                               if ((time() - $time) > (24*60*60)) {
                                                                       unset($titles[$title]);
                                                               }
                                                       }
                                                       file_put_contents('titles.txt',serialize($titles));
                                                       $tcount = count($titles);
                                                       foreach ($ov as $x => $y) {
                                                               $ocount[$x] = count($y);
                                                       }
                                                       arsort($ocount);
                                                       foreach ($ocount as $x => $y) {
                                                               $mova = $x;
                                                               $movacount = $y;
                                                               break;
                                                       }
                                                       preg_match('/\(\'\'\'\[\[([^|]*)\|more...\]\]\'\'\'\)/iU',$wpq->getpage('Wikipedia:Today\'s featured article/'.date('F j, Y')),$tfa);
                                                       $tfa = $tfa[1];
                                                       
                                                       if (!preg_match('/(yes|enable|true)/i',$wpq->getpage('User:'.$user.'/Run'))) {
                                                               $run = false;
                                                       } else {
                                                               $run = true;
                                                       }
                                                       $top5beat = array();
                                                       if (!mysql_ping($mysql)) { $mysql = mysql_pconnect($mysqlhost.':'.$mysqlport,$mysqluser,$mysqlpass); mysql_select_db($mysqldb, $mysql); }
                                                       $q = mysql_query('SELECT `user`,COUNT(`id`) AS `count` FROM `cluebot_enwiki`.`beaten` WHERE `user` != \'\' GROUP BY `user` HAVING `count` > 1 ORDER BY `count` DESC LIMIT 5');
                                                       while ($x = mysql_fetch_assoc($q)) {
                                                               $top5beat[] = $x['user'].' ('.$x['count'].')';
                                                       }
                                                       unset($x,$q);
                                                       $top5beat = implode(' - ',$top5beat);
                                                       fwrite($irc,$cmd.' :I am '.$user.'.  I am currently '.($run?'enabled':'disabled').'.  I currently have '.$wpq->contribcount($user).' contributions.'."\n");
                                                       fwrite($irc,$cmd.' :I have attempted to revert '.$tcount.' unique article/user combinations in the last 24 hours.  ' .
                                                               'I know of '.$count.' different articles that have been vandalized in the last 48 hours.'."\n"
                                                               );
                                                       fwrite($irc,$cmd.' :'.$mova.' is the most vandalized page with a total of '.$movacount.' vandalisms in the last 48 hours.  ' .
                                                               'Today\'s featured article is: '.$tfa.'.'."\n"
                                                               );
                                                       fwrite($irc,$cmd.' :The following users have beat me to the revert the most: '.$top5beat."\n");
                                                       fwrite($irc,$cmd.' :I log all information to '.$ircchannel.'.  This channel is '.$d[2].'.'."\n");
                                                       unset($x,$y,$count,$ov,$tcount,$ocount,$mova,$movacount,$tfa,$run,$title,$titles,$time,$top5beat);
                                                       break;
                                               case 'warninglevel':
                                                       if (preg_match("/\[\[User:(.*)\]\]/",$data,$n)) {
                                                               $warning = 0;
                                                               if (preg_match_all('/.*(\d{2}):(\d{2}), (\d+) ([a-zA-Z]+) (\d{4}) \(UTC\)/iU',
                                                                       $wpq->getpage('User talk:'.$n[1]),
                                                                       $match,PREG_SET_ORDER)
                                                               ) {
                                                                       foreach ($match as $m) {
                                                                               $month = array('January' => 1, 'February' => 2, 'March' => 3,
                                                                                       'April' => 4, 'May' => 5, 'June' => 6, 'July' => 7,
                                                                                       'August' => 8, 'September' => 9, 'October' => 10,
                                                                                       'November' => 11, 'December' => 12
                                                                               );
                                                                               if ($m[1] == 'Blatantvandal (serious warning)') $m[2] = 4;
                                                                               if ((time() - gmmktime($m[4],$m[5],0,$month[$m[7]],$m[6],$m[8])) <= (2*24*60*60)) {
                                                                                       if ($m[2] > $warning) { $warning = $m[2]; }
                                                                               }
                                                                       }
                                                               }
                                                               fwrite($irc,$cmd.' :[[User:'.$n[1].']] is at warning level '.$warning.".\n");
                                                       } else {
                                                               fwrite($irc,$cmd.' :Couldn\'t find link.'."\n");
                                                       }
                                                       break;
                                               case 'count':
                                                       if (preg_match("/\[\[User:(.*)\]\]/",$data,$n)) {
                                                               fwrite($irc,$cmd.' :[[User:'.$n[1].']] has '.$wpq->contribcount($n[1])." contributions.\n");
                                                       } else {
                                                               fwrite($irc,$cmd.' :Couldn\'t find link.'."\n");
                                                       }
                                                       break;
                                               case 'help':
                                                       fwrite($irc,$cmd.' :Please see User:'.$user.'.'."\n");
                                                       break;
                                               case 'eval':
                                                       $tmp = explode(' ',$data,6);
                                                       $tmp1 = explode('!',substr($d[0],1));
                                                       if ($d[4] == md5($thesecret.$tmp1[0].$tmp[5])) {
                                                               eval($tmp[5]);
                                                       } else {
                                                               fwrite($irc,$cmd.' :Code incorrect.'."\n");
                                                       }
                                                       break;
                                               case 'cbproxy':
                                                       $tmp = explode(' ',$data,6);
                                                       $tmp1 = explode('!',substr($d[0],1));
                                                       if ($tmp1[0] == 'ClueBot-Bopm') {
                                                               foreach (explode(',',$ircproxychannels) as $y) {
                                                                       fwrite($irc,'PRIVMSG '.$y.' :!admin '.$tmp[5]."\n");
                                                               }
                                                               
                                                               $data = $wpq->getpage('Wikipedia:WikiProject on open proxies');
                                                               if (strpos($data,$tmp[4]) === false) {
                                                                       $header = explode('

|- class="plainlinks" style="font-size:0.8em;" | 127.0.0.1 | user / talk | cross-wiki-contributions |class="plainlinks"|m c wb wp ws wt v q  | lookup whois |m c wb wp ws wt v q (all) || Example',$data,2);

                                                                       $header[0] .= '

|- class="plainlinks" style="font-size:0.8em;" | 127.0.0.1 | user / talk | cross-wiki-contributions |class="plainlinks"|m c wb wp ws wt v q  | lookup whois |m c wb wp ws wt v q (all) || Example ';

                                                                       $footer = $header[1];
                                                                       $header = $header[0];
                                                                       $data = "\n".'

|- class="plainlinks" style="font-size:0.8em;" | '.$tmp[4].' | [[User:'.$tmp[4].'|user]] / [[User talk:'.$tmp[4].'|talk]] | cross-wiki-contributions |class="plainlinks"|[4.' m] [4.' c] [4.' wb] [4.' wp] [4.' ws] [4.' wt] [4.' v] [4.' q]  | [4.'&display=webtable lookup] [4.' whois] |[4.'&wpBlockOther=2+years&wpAnonOnly=0&wpCreateAccount=1&wpEnableAutoblock=0&wpBlockReason=%5B%5Bw%3Aopen+proxy%7Copen+proxy%5D%5D+or+%5B%5Bw%3Azombie+computer%7Czombie%5D%5D+%28see+%5B%5Bm%3AWM%3AOP%7CMetaProject+on+open+proxies%5D%5D+for+information%29 m] [4.'&wpBlockOther=2+years&wpAnonOnly=0&wpCreateAccount=1&wpEnableAutoblock=0&wpBlockReason=%5B%5Bw%3Aopen+proxy%7Copen+proxy%5D%5D+or+%5B%5Bw%3Azombie+computer%7Czombie%5D%5D+%28see+%5B%5Bm%3AWM%3AOP%7CMetaProject+on+open+proxies%5D%5D+for+information%29 c] [4.'&wpBlockOther=2+years&wpAnonOnly=0&wpCreateAccount=1&wpEnableAutoblock=0&wpBlockReason=%5B%5Bw%3Aopen+proxy%7Copen+proxy%5D%5D+or+%5B%5Bw%3Azombie+computer%7Czombie%5D%5D+%28see+%5B%5Bm%3AWM%3AOP%7CMetaProject+on+open+proxies%5D%5D+for+information%29 wb] [4.'&wpBlockOther=2+years&wpAnonOnly=0&wpCreateAccount=1&wpEnableAutoblock=0&wpBlockReason=%5B%5Bw%3Aopen+proxy%7Copen+proxy%5D%5D+or+%5B%5Bw%3Azombie+computer%7Czombie%5D%5D+%28see+%5B%5Bm%3AWM%3AOP%7CMetaProject+on+open+proxies%5D%5D+for+information%29 wp] [4.'&wpBlockOther=2+years&wpAnonOnly=0&wpCreateAccount=1&wpEnableAutoblock=0&wpBlockReason=%5B%5Bw%3Aopen+proxy%7Copen+proxy%5D%5D+or+%5B%5Bw%3Azombie+computer%7Czombie%5D%5D+%28see+%5B%5Bm%3AWM%3AOP%7CMetaProject+on+open+proxies%5D%5D+for+information%29 ws] [4.'&wpBlockOther=2+years&wpAnonOnly=0&wpCreateAccount=1&wpEnableAutoblock=0&wpBlockReason=%5B%5Bw%3Aopen+proxy%7Copen+proxy%5D%5D+or+%5B%5Bw%3Azombie+computer%7Czombie%5D%5D+%28see+%5B%5Bm%3AWM%3AOP%7CMetaProject+on+open+proxies%5D%5D+for+information%29 wt] [4.'&wpBlockOther=2+years&wpAnonOnly=0&wpCreateAccount=1&wpEnableAutoblock=0&wpBlockReason=%5B%5Bw%3Aopen+proxy%7Copen+proxy%5D%5D+or+%5B%5Bw%3Azombie+computer%7Czombie%5D%5D+%28see+%5B%5Bm%3AWM%3AOP%7CMetaProject+on+open+proxies%5D%5D+for+information%29 v] [4.'&wpBlockOther=2+years&wpAnonOnly=0&wpCreateAccount=1&wpEnableAutoblock=0&wpBlockReason=%5B%5Bw%3Aopen+proxy%7Copen+proxy%5D%5D+or+%5B%5Bw%3Azombie+computer%7Czombie%5D%5D+%28see+%5B%5Bm%3AWM%3AOP%7CMetaProject+on+open+proxies%5D%5D+for+information%29 q] (all) || '.$tmp[5].' The7DeadlySins 23:32, 28 October 2008 (UTC)'."\n";

                                                                       $data = $header.$data.$footer;
                                                                       unset($header,$footer);
                                                                       $wpi->post('Wikipedia:WikiProject on open proxies',$data,'Adding '.$tmp[4].'.');
                                                                       unset($data);
                                                               }
                                                       }
                                                       break;
                                       }
                               }
                       }
               }
               die();
       }

$heuristics = "==Heuristics==\n\n===Config (cluebot.heuristics.config.php)===\n\n

".htmlentities(file_get_contents('cluebot.heuristics.config.php'))."

\n\n"; foreach (glob('heuristics/cluebot.*.heuristic.php') as $heuristic) $heuristics .= '==='.$heuristic."===\n\n

".htmlentities(file_get_contents($heuristic))."

\n\n";

       unset($heuristic);
       $wpi->forcepost('User:'.$user.'/Source',

'The following is automatically generated by '.$user.".\n\n\n\n==Classes (wikibot.classes.php)==\n\n

" .
                htmlentities(file_get_contents('../wikibot.classes.php'))."

\n\n\n\n==Diff function (diff.function.php)==\n\n

" .
                htmlentities(file_get_contents('../diff.function.php'))."

\n\n\n\n==Source to ".$user . "==\n\n".'

'.htmlentities(file_get_contents(__FILE__))."

\n\n\n\n" .

               $heuristics .

"==Score list==\n\n".'

'.htmlentities(file_get_contents('cluebot.scorelist.php'))."

\n\n\n\nThe7DeadlySins 23:32, 28 October 2008 (UTC)",

               'Automated source upload.'); /* Our source code, we force post this because this is *our* page, and it triggers the nobots. */
       unset($heuristics);
       $wpi->forcepost('User:'.$user,
               "User:ClueBot Commons/Userpage\n",
               'Automated bot userpage set.'); /* Our page, we force post this because this is *our* page. */


       $tfas = 0;
       $pipe = fopen('thepipe','w');
       $stdin = fopen('php://stdin','r');
       $run = $wpq->getpage('User:'.$user.'/Run');
       $wl = $wpq->getpage('User:'.$user.'/Whitelist');
       $optin = $wpq->getpage('User:'.$user.'/Optin');
       $aoptin = $wpq->getpage('User:'.$user.'/AngryOptin');
       unset($tmp,$tmp2,$tmp3);
       $tmp = explode("\n",$wpq->getpage('User:'.$owner.'/CBAutostalk.js'));
       foreach ($tmp as $tmp2) { if (substr($tmp2,0,1) != '#') { $tmp3 = explode('|',$tmp2,2); $stalk[$tmp3[0]] = trim($tmp3[1]); } }
       $tmp = explode("\n",$wpq->getpage('User:'.$owner.'/CBAutoedit.js'));
       foreach ($tmp as $tmp2) { if (substr($tmp2,0,1) != '#') { $tmp3 = explode('|',$tmp2,2); $edit[$tmp3[0]] = trim($tmp3[1]); } }
       unset($tmp,$tmp2,$tmp3);
       print_r($stalk); print_r($edit);
       while (1) {
               $feed = fsockopen($feedhost,$feedport,$feederrno,$feederrstr,30);
               if (!$feed) {
                       sleep(10);
                       $feed = fsockopen($feedhost,$feedport,$feederrno,$feederrstr,30);
                       if (!$feed) die($feederrstr.' ('.$feederrno.')');
               }
               fwrite($feed,'USER '.$user.' "1" "1" :ClueBot Wikipedia Bot.'."\n");
               fwrite($feed,'NICK '.$user."\n");
               while (!feof($feed)) {
                       $rawline = fgets($feed,1024);
                       $line = str_replace(array("\n","\r","\002"),,$rawline);
                       $line = preg_replace('/\003(\d\d?(,\d\d?)?)?/',,$line);

// echo 'FEED: '.$line."\n";

                       if (!$line) { fclose($feed); break; }
                       $linea= explode(' ',$line,4);
                       if (strtolower($linea[0]) == 'ping') {
                               fwrite($feed,'PONG '.$linea[1]."\n");
                       } elseif (($linea[1] == '376') or ($linea[1] == '422')) {
                               fwrite($feed,'JOIN '.$feedchannel."\n");
                       } elseif ((strtolower($linea[1]) == 'privmsg') and (strtolower($linea[2]) == strtolower($feedchannel))) {
                               $message = substr($linea[3],1);
                               if (preg_match('/^\[\[((Talk|User|Wikipedia|Image|MediaWiki|Template|Help|Category|Portal|Special)(( |_)talk)?:)?([^\x5d]*)\]\] (\S*) (http:\/\/en\.wikipedia\.org\/w\/index\.php\?title=[^&]*&diff=(\d*)&oldid=(\d*)|http:\/\/en\.wikipedia\.org\/wiki\/\S+)? \* ([^*]*) \* (\(([^)]*)\))? (.*)$/S',$message,$m)) {
                                       $messagereceived = microtime(1);
                                       $change['namespace'] = $m[1];
                                       $change['title'] = $m[5];
                                       $change['flags'] = $m[6];
                                       $change['url'] = $m[7];
                                       $change['revid'] = $m[8];
                                       $change['old_revid'] = $m[9];
                                       $change['user'] = $m[10];
                                       $change['length'] = $m[12];
                                       $change['comment'] = $m[13];

// include 'cluebot.stalk.config.php';

                                       $stalkchannel = array();
                                       foreach ($stalk as $key => $value) if (fnmatch(str_replace('_',' ',$key),str_replace('_',' ',$change['user']))) $stalkchannel = array_merge($stalkchannel,explode(',',$value));
                                       foreach ($stalkbots as $key => $value) if (fnmatch(str_replace('_',' ',$key),str_replace('_',' ',$change['user']))) $stalkchannel = array_merge($stalkchannel,explode(',',$ircbagtrialchannels));
                                       foreach ($edit as $key => $value) if (fnmatch(str_replace('_',' ',$key),str_replace('_',' ',$change['namespace'].$change['title']))) $stalkchannel = array_merge($stalkchannel,explode(',',$value));

// if ($change['user'] == $owner) $stalkchannel[] = $ircchannel;

                                       $stalkchannel = array_unique($stalkchannel);
                                       foreach ($stalkchannel as $y) {
                                               fwrite($irc,'PRIVMSG '.$y.' :New edit: [['.$change['namespace'].$change['title'].']] http://en.wikipedia.org/w/index.php?title=' .
                                                       urlencode($change['namespace'].$change['title']).'&diff=prev'.'&oldid='.urlencode($change['revid']).' * '.$change['user'] .
                                                       ' * '.$change['comment']."\n");
                                       }
                                       
                                       if (($change['namespace'] == 'User:') or ($change['namespace'] == 'User talk:')) {
                                               if (strtolower($change['title']) == strtolower($user.'/Run')) { $run = $wpq->getpage('User:'.$user.'/Run'); }
                                               if (strtolower($change['title']) == strtolower($user.'/Whitelist')) { $wl = $wpq->getpage('User:'.$user.'/Whitelist'); }
                                               if (strtolower($change['title']) == strtolower($user.'/Optin')) { $optin = $wpq->getpage('User:'.$user.'/Optin'); }
                                               if (strtolower($change['title']) == strtolower($user.'/AngryOptin')) { $aoptin = $wpq->getpage('User:'.$user.'/AngryOptin'); }
                                               if (strtolower($change['title']) == strtolower($owner.'/CBAutostalk.js')) {
                                                       unset($stalk);
                                                       $tmp = explode("\n",$wpq->getpage('User:'.$owner.'/CBAutostalk.js'));
                                                       foreach ($tmp as $tmp2) { if (substr($tmp2,0,1) != '#') { $tmp3 = explode('|',$tmp2,2); $stalk[$tmp3[0]] = trim($tmp3[1]); } }
                                                       unset($tmp,$tmp2,$tmp3);
                                                       print_r($stalk);
                                               }
                                               if (strtolower($change['title']) == strtolower($owner.'/CBAutoedit.js')) {
                                                       unset($edit);
                                                       $tmp = explode("\n",$wpq->getpage('User:'.$owner.'/CBAutoedit.js'));
                                                       foreach ($tmp as $tmp2) { if (substr($tmp2,0,1) != '#') { $tmp3 = explode('|',$tmp2,2); $edit[$tmp3[0]] = trim($tmp3[1]); } }
                                                       unset($tmp,$tmp2,$tmp3);
                                                       print_r($edit);
                                               }
                                               if (strtolower($change['title']) == strtolower($owner.'/CBChannels.js')) {
                                                       $ircconfig = explode("\n",$wpq->getpage('User:'.$owner.'/CBChannels.js'));
                                                       $tmp = array();
                                                       foreach($ircconfig as $tmpline) { if (substr($tmpline,0,1) != '#') { $tmpline = explode('=',$tmpline,2); $tmp[trim($tmpline[0])] = trim($tmpline[1]); } }
                                                       print_r($tmp);
                                                       $tmpold = array();
                                                       $tmpnew = array();
                                                       
                                                       foreach ($tmp as $tmp2) foreach (explode(',',$tmp2) as $tmp3) $tmpnew[$tmp3] = 1;
                                                       foreach (explode(',',$ircchannel.','.$ircdebugchannel.','.$ircreportchannel.','.$ircvandalismchannel.','.$ircaivchannel.','.$irctechchannel.','.$ircproxychannels.','.$ircunrevertedchannels.','.$ircbagtrialchannels.','.$ircotherchannels) as $tmp3) $tmpold[$tmp3] = 1;
                                                       foreach ($tmpold as $tmp2 => $tmp3) if (isset($tmpnew[$tmp2])) unset($tmpold[$tmp2],$tmpnew[$tmp2]);
                                                       foreach ($tmpnew as $tmp2 => $tmp3) $tmpnew1[] = $tmp2;
                                                       foreach ($tmpold as $tmp2 => $tmp3) $tmpold1[] = $tmp2;
                                                       $tmpold = $tmpold1; $tmpnew = $tmpnew1; unset($tmpold1,$tmpnew1);
                                                       fwrite($irc,'JOIN '.implode(',',$tmpnew)."\n");
                                                       fwrite($irc,'PART '.implode(',',$tmpold)."\n");
                                                       $ircchannel = $tmp['ircchannel'];
                                                       $ircdebugchannel = $tmp['ircdebugchannel'];
                                                       $ircreportchannel = $tmp['ircreportchannel'];
                                                       $ircvandalismchannel = $tmp['ircvandalismchannel'];
                                                       $ircaivchannel = $tmp['ircaivchannel'];
                                                       $irctechchannel = $tmp['irctechchannel'];
                                                       $ircproxychannels = $tmp['ircproxychannels'];
                                                       $ircunrevertedchannels = $tmp['ircunrevertedchannels'];
                                                       $ircbagtrialchannels = $tmp['ircbagtrialchannels'];
                                                       $ircotherchannels = $tmp['ircotherchannels'];
                                                       unset($tmp,$tmpline,$tmpold,$tmpnew,$tmp2,$tmp3);
                                               }
                                       }
                                       if ($change['namespace'].$change['title'] == 'Wikipedia:Bots/Requests for approval') {
                                               $stalkbots = array();
                                               $trialbots = explode("\n",$wpq->getpage('Wikipedia:Bots/Requests for approval'));
                                               foreach ($trialbots as $trialbot) if (preg_match('/\{\{BRFA\|(.*)\|.*\|Trial\}\}/',str_replace(array("\n","\r"),,$trialbot),$m)) $stalkbots[$m[1]] = 1;
                                       }
                                       if (($change['namespace'] != ) and ((!preg_match('/\* \[\[('.preg_quote($change['namespace'].$change['title'],'/').')\]\] \- .*/i',$optin))) and ($change['flags'] != 'move')) continue;
                                       $change['justtitle'] = $change['title'];
                                       $change['title'] = $change['namespace'].$change['title'];
                                       if ($change['flags'] == 'move') {
                                               if (preg_match('/moved \[\[(.*)\]\] to \[\[(.*)\]\]( over redirect)?: (.*)$/',$change['comment'],$m)) {
                                                       $change['title'] = $m[1];
                                                       $change['newtitle'] = $m[2];
                                                       $change['realcomment'] = $change['comment'];
                                                       $change['comment'] = $m[4];
                                                       echo "\n\n\n".'Move!'."\n\n\n";
                                                       print_r($change);
                                                       echo "\n\n\n".'Move!'."\n\n\n";
                                               }
                                       }
                                       if (
                                               ((time() - $tfas) >= 1800)
                                               and (preg_match('/\(\'\'\'\[\[([^|]*)\|more...\]\]\'\'\'\)/iU',$wpq->getpage('Wikipedia:Today\'s featured article/'.date('F j, Y')),$tfam))
                                       ) {
                                               $tfas = time();
                                               $tfa = $tfam[1];
                                               //echo "TFA: ".$tfa."\n";
                                       }
                                       $s = null;
                                       
                                       $pid = @pcntl_fork();
                                       if ($pid != 0) continue;
                                       $hutime = microtime(1);
                                       include 'cluebot.heuristics.config.php';
                                       foreach ($heuristics as $heuristic) {
                                               $heuristicret = false;
                                               include 'heuristics/cluebot.'.$heuristic.'.heuristic.php';
                                               if ($heuristicret == true) {
                                                       $stats = unserialize(file_get_contents('cluebot.heuristics.stats.txt'));
                                                       $stats[$heuristic]++;
                                                       print_r($log);
                                                       file_put_contents('cluebot.heuristics.stats.txt',serialize($stats));
                                                       unset($stats);
                                                       break;
                                               }
                                       }
                                       if ($heuristicret == true) { echo 'Heuristics time: '.(microtime(1) - $hutime)."\n"; file_put_contents('trainingdata.txt',$change['title']."\0".$change['revid']."\0".'1'."\n",FILE_APPEND); }
                                       else {
                                               $tmp = explode(' ',$rawline,4); $tmp = $tmp[3];
                                               $udp = fsockopen('udp://localhost',3333);
                                               fwrite($udp,substr(str_replace(array("\n","\r"),,$tmp),1)."\n");
                                               fclose($udp);
                                               unset($tmp,$udp);
                                               $d = $wpi->diff($change['title'],$change['old_revid'],$change['revid']);
                                               $s = score($obscenelist,$d[0],$log);
                                               $s -= score($obscenelist,$d[1],$log);
                                               if ($s > 15) file_put_contents('trainingdata.txt',$change['title']."\0".$change['revid']."\0".'0'."\n",FILE_APPEND);
                                       }
                                       unset($hutime);
                                       if (
                                               ($heuristicret == true)
                                       ) {
                                               if (
                                                       (
                                                               ( /* IP users with 250 contributions are fine .. */
                                                                       (long2ip(ip2long($change['user'])) == $change['user'])
                                                                       /* and ($uc = $wpapi->usercontribs($change['user'],250))
                                                                       and (!isset($uc[249])) */
                                                               )
                                                               or ( /* Users with 50 contributions are fine .. */
                                                                       (long2ip(ip2long($change['user'])) != $change['user'])
                                                                       and ($wpq->contribcount($change['user']) < 50)
                                                               )
                                                       )
                                                       and ( /* Whitelisted users are ok. */
                                                               /* ($wl = $wpq->getpage('User:'.$user.'/Whitelist'))
                                                               and */ (!preg_match('/^\* \[\[User:('.preg_quote($change['user'],'/').')|\1\]\] \- .*/',$wl))
                                                       )
                                               ) {

// $vandalpage = $wpq->getpage('User:'.$user.'/PossibleVandalism'); // $x = explode("\n\n",$vandalpage); // foreach ($x as $k => $y) { // if (preg_match('/(\d+)\-(\d+)\-(\d+)T(\d+):(\d+):(\d+)/',$y,$m)) { // if ((time() - gmmktime($m[4],$m[5],$m[6],$m[2],$m[3],$m[1])) > (5*60*60)) { // unset($x[$k]); // } // } // } // $vandalpage = implode("\n\n",$x);

                                                       $diff = 'http://en.wikipedia.org/w/index.php' .
                                                               '?title='.urlencode($change['title']) .
                                                               '&diff='.urlencode($change['revid']) .
                                                               '&oldid='.urlencode($change['old_revid']);
                                                       $report = '[['.$change['title'].']] was ' .
                                                               (($change['flags'] != 'move')?'['.$diff.' changed] by ':'moved to [['.$change['newtitle'].']] by ') .
                                                               '[[Special:Contributions/'.$change['user'].'|'.$change['user'].']] ' .
                                                               '[[User:'.$change['user'].'|(u)]] ' .
                                                               '[[User talk:'.$change['user'].'|(t)]] ' .
                                                               $reason.' on '.gmdate('c');

// $datatopost = $vandalpage."\n\n".'Possible vandalism: '.$report." The7DeadlySins 23:32, 28 October 2008 (UTC)\n";


                                                       if ($s == null) {

// $rv = $wpapi->revisions($change['title'],2,'older',true,$change['revid']); // $s = score($scorelist,diff($rv[1]['*'],$rv[0]['*'])); // $s += (score($scorelist,diff($rv[1]['*'],$rv[0]['*'],false))) * -1;

                                                               $s = 'N/A';
                                                       }
                                                       $tmp = unserialize(file_get_contents('oftenvandalized.txt'));
                                                       foreach ($tmp as $key1 => $tmp2) {
                                                               foreach ($tmp2 as $key2 => $time) {
                                                                       if ((time() - $time) > (2*24*60*60)) { unset($tmp[$key1][$key2]); }
                                                               }
                                                       }
                                                       $tmp[$change['title']][] = time();
                                                       if (count($tmp[$change['title']]) >= 30) {
                                                               foreach (explode(',',$ircreportchannel) as $y) {
                                                                       fwrite($irc,'PRIVMSG '.$y.' :!admin [['.$change['title'].']] has been vandalized '.(count($tmp[$change['title']])).' times in the last 2 days.'."\n");
                                                               }
                                                       }
                                                       file_put_contents('oftenvandalized.txt',serialize($tmp));
                                                       if (
                                                               (
                                                                       ($rv1 = $wpapi->revisions($change['title'],1,'older'))
                                                                       and ($rv1[0]['revid'] == $change['revid'])
                                                               )
                                                               or ($change['flags'] == 'move')
                                                       ) { /* No need to continue further if it has been reverted */
                                                               echo 'Possible vandalism: '.$change['title'].' changed by '.$change['user'].' '.$reason.' on '.$rv[0]['timestamp'].'('.$s.").\n";
                                                               foreach (explode(',',$ircdebugchannel) as $y) {
                                                                       fwrite($irc,'PRIVMSG '.$y.' :Possible vandalism: '.$change['title'].' changed by '.$change['user'].' '.$reason.' on '.$rv[0]['timestamp'].'('.$s.").\n");
                                                                       fwrite($irc,'PRIVMSG '.$y.' :( http://en.wikipedia.org/w/index.php?title='.urlencode($change['title']).'&action=history | '.$change['url'].' )'."\n");
                                                               }
                                                               fwrite($pipe,'http://en.wikipedia.org/w/index.php?title='.urlencode($change['title']).'&action=history'."\n"); /* Tell owner */
                                                               $mqtime = microtime(1);
                                                               if (is_array($log)) {
                                                                       $logt = ;
                                                                       foreach ($log as $k => $v) {
                                                                               $logt .= '* '.$v.' * "'.$k.'"'."\n";
                                                                       }
                                                               }
                                                               $query = 'INSERT INTO `vandalism` ' .
                                                                       '(`id`,`user`,`article`,`heuristic`'.((is_array($log))?',`regex`':).',`reason`,`diff`,`old_id`,`new_id`,`reverted`) ' .
                                                                       'VALUES ' .
                                                                       '(NULL,\.mysql_real_escape_string($change['user']).'\',' .
                                                                       '\.mysql_real_escape_string($change['title']).'\',' .
                                                                       '\.mysql_real_escape_string($heuristic).'\',' .
                                                                       ((is_array($log))?'\.mysql_real_escape_string($logt).'\',':) .
                                                                       '\.mysql_real_escape_string($reason).'\',' .
                                                                       '\.mysql_real_escape_string($change['url']).'\',' .
                                                                       '\.mysql_real_escape_string($change['old_revid']).'\',' .
                                                                       '\.mysql_real_escape_string($change['revid']).'\',0)';
                                                               //echo 'Mysql query: '.$query."\n";
                                                               if (!mysql_ping($mysql)) {
                                                                       $mysql = mysql_pconnect($mysqlhost.':'.$mysqlport,$mysqluser,$mysqlpass);
                                                                       if (!$mysql) { die('Could not connect: ' . mysql_error()); }
                                                                       if (!mysql_select_db($mysqldb, $mysql)) { die ('Can\'t use database : ' . mysql_error()); }
                                                               }
                                                               mysql_query($query);
                                                               //echo 'Mysql error: '.mysql_error()."\n";
                                                               $mysqlid = mysql_insert_id();
                                                               
                                                               echo 'MySQL time: '.(microtime(1) - $mqtime).' MySQL id: '.$mysqlid."\n";
                                                               unset($mqtime);
                                                               if (
                                                                       (
                                                                               (
                                                                                       (preg_match('/(assisted|manual)/iS',$status))
                                                                                       and (print('Revert [y/N]? '))
                                                                                       and (strtolower(substr(fgets($stdin,3),0,1)) == 'y')
                                                                               )
                                                                               or (
                                                                                       (preg_match('/(read-write|rw|go|approved|trial)/iS',$status))
                                                                               )
                                                                       )
                                                                       and (
                                                                               (
                                                                                       (
                                                                                               ((time() - $tfas) < 1800)
                                                                                               or (
                                                                                                       (preg_match('/\(\'\'\'\[\[([^|]*)\|more...\]\]\'\'\'\)/iU',$wpq->getpage('Wikipedia:Today\'s featured article/'.date('F j, Y')),$tfam))
                                                                                                       and ($tfas = time())
                                                                                                       and ($tfa = $tfam[1])
                                                                                                       and ((print("TFA: ".$tfa."\n")) or (true))
                                                                                               )
                                                                                       )
                                                                                       and ($tfa == $change['title'])
                                                                               )
                                                                               or (
                                                                                       (preg_match('/\* \[\[('.preg_quote($change['title'],'/').')\]\] \- .*/i',$aoptin))
                                                                                       and ((fwrite($irc,'PRIVMSG '.$ircdebugchannel.' :Angry-reverting [['.$change['title'].']].'."\n")) or (true))
                                                                               )
                                                                               or (
                                                                                       (($tmp = unserialize(file_get_contents('titles.txt'))) !== false)
                                                                                       and ((!isset($tmp[$change['title'].$change['user']])) or ((time() - $tmp[$change['title'].$change['user']]) > (24*60*60)))
                                                                                       and ($tmp[$change['title'].$change['user']] = time())
                                                                                       and ((file_put_contents('titles.txt',serialize($tmp))) !== false)
                                                                               )
                                                                       )
                                                               ) {
                                                                       echo 'Reverting ...'."\n";
                                                                       if ($change['flags'] != 'move') {
                                                                               $rev = $wpapi->revisions($change['title'],5,'older',false,null,true,true);
                                                                               $revid = 0;
                                                                               $rbtok = $rev[0]['rollbacktoken'];
                                                                               foreach ($rev as $revdata) {
                                                                                       if ($revdata['user'] != $change['user']) {
                                                                                               $revid = $revdata['revid'];
                                                                                               break;
                                                                                       }
                                                                               }
                                                                               if (($revdata['user'] == $user) or (in_array($revdata['user'],explode(',',$botfriends)))) { die(); /* Do not revert to us. */ }
                                                                       }

// if ($revid == 0) { die(); }

                                                                       foreach (explode(',',$ircdebugchannel) as $y) {
                                                                               fwrite($irc,'PRIVMSG '.$y.' :Reverting ...'."\n");
                                                                       }

// $revisiondata = $wpapi->revisions($change['title'],1,'older',true,$revid); // if (!$revisiondata[0]['*']) die(); // if (!$rv1[0]['*']) $rv1[0]['*'] = $rv[0]['*']; // $wpi->post( // $change['title'], // $revisiondata[0]['*'], // 'Reverting possible vandalism by [[Special:Contributions/'.$change['user'].'|'.$change['user'].']] ' . // 'to version by '.$revisiondata[0]['user'].'. ' . // 'False positive? Report it. '. // 'Thanks, '.$user.'. ('.$mysqlid.') (Bot)', // false, // $rv1 // ); /* Revert the page */

                                                                       if ($change['flags'] != 'move') {
                                                                               $rbret = $wpi->rollback(
                                                                                       $change['title'],
                                                                                       $change['user'],
                                                                                       'Reverting possible vandalism by [[Special:Contributions/'.$change['user'].'|'.$change['user'].']] ' .
                                                                                       'to '.(($revid == 0)?'older version':'version by '.$revdata['user']).'. ' .
                                                                                       'False positive? Report it. '.
                                                                                       'Thanks, User:'.$user.'. ('.$mysqlid.') (Bot)',
                                                                                       $rbtok,
                                                                                       false
                                                                               );
                                                                       } else {
                                                                               $rbret = $wpi->move(
                                                                                       $change['newtitle'],
                                                                                       $change['title'],
                                                                                       'Reverting possible vandalism by [[Special:Contributions/'.$change['user'].'|'.$change['user'].']] ' .
                                                                                       'to '.(($revid == 0)?'older version':'version by '.$revdata['user']).'. ' .
                                                                                       'False positive? Report it. '.
                                                                                       'Thanks, User:'.$user.'. ('.$mysqlid.') (Bot)'
                                                                               );
                                                                       }

// // $rv2 = $wpapi->revisions($change['title'],1); // if ($rv2[0]['user'] == $user) {

                                                                       if ($rbret !== false) {
                                                                               foreach (explode(',',$ircdebugchannel) as $y) {
                                                                                       fwrite($irc,'PRIVMSG '.$y.' :Reverted. ('.(microtime(1) - $messagereceived).' s)'."\n");
                                                                               }
                                                                               $warning = 0;
                                                                               $tpcontent = $wpq->getpage('User talk:'.$change['user']);
                                                                               if (preg_match_all('/.*(\d{2}):(\d{2}), (\d+) ([a-zA-Z]+) (\d{4}) \(UTC\)/iU',
                                                                                       $tpcontent,
                                                                                       $match,PREG_SET_ORDER)
                                                                               ) {
                                                                                       foreach ($match as $m) {
                                                                                               $month = array('January' => 1, 'February' => 2, 'March' => 3, 
                                                                                                       'April' => 4, 'May' => 5, 'June' => 6, 'July' => 7, 
                                                                                                       'August' => 8, 'September' => 9, 'October' => 10, 
                                                                                                       'November' => 11, 'December' => 12
                                                                                               );
                                                                                               if ($m[1] == 'Blatantvandal (serious warning)') $m[2] = 4;
                                                                                               if ((time() - gmmktime($m[4],$m[5],0,$month[$m[7]],$m[6],$m[8])) <= (2*24*60*60)) {
                                                                                                       if ($m[2] > $warning) { $warning = $m[2]; }
                                                                                               }
                                                                                       }
                                                                               }
                                                                               $warning++;
                                                                               if ($warning == 5) { /* Report them if they have been warned 4 times. */
                                                                                       $aivdata = $wpq->getpage('Wikipedia:Administrator_intervention_against_vandalism/TB2');
                                                                                       if (!preg_match('/'.preg_quote($change['user'],'/').'/i',$aivdata)) {
                                                                                               foreach(explode(',',$ircaivchannel) as $y) {
                                                                                                       fwrite($irc,'PRIVMSG '.$y.' :!admin Reporting [[User:'.$change['user'].']] to WP:AIV. Contributions: [[Special:Contributions/'.$change['user'].']] Block: [[Special:Blockip/'.$change['user'].']]'."\n");
                                                                                               }
                                                                                               foreach (explode(',',$ircvandalismchannel) as $y) {
                                                                                                       fwrite($irc,'PRIVMSG '.$y.' :computer bl add '.$change['user'].' x='.(24*$warning).' r=Vandalism to [['.$change['title'].']] (#'.$warning.").\n");
                                                                                               }
                                                                                               $wpi->post(
                                                                                                       'Wikipedia:Administrator_intervention_against_vandalism/TB2',
                                                                                                       $aivdata .
                                                                                                       "\n\n* {{".((long2ip(ip2long($change['user'])) == $change['user'])?'IPvandal':'Vandal').'|'.$change['user'].'}}' .
                                                                                                       ' - '.$report." (Automated) The7DeadlySins 23:32, 28 October 2008 (UTC)\n",
                                                                                                       'Automatically reporting [[Special:Contributions/'.$change['user'].']]. (bot)',
                                                                                                       false,
                                                                                                       null,
                                                                                                       false
                                                                                               );
                                                                                       } else {
                                                                                               foreach (explode(',',$ircreportchannel) as $y) {
                                                                                                       fwrite($irc,'PRIVMSG '.$y.' :!admin [[User:'.$change['user'].']] has vandalized at least one time while being listed on WP:AIV.  Contributions: [[Special:Contributions/'.$change['user'].']] Block: [[Special:Blockip/'.$change['user'].']]'."\n");
                                                                                               }
                                                                                       }
                                                                               } elseif ($warning < 5) { /* Warn them if they haven't been warned 4 times. */
                                                                                       foreach (explode(',',$ircvandalismchannel) as $y) {
                                                                                               fwrite($irc,'PRIVMSG '.$y.' :computer bl add '.$change['user'].' x='.(24*$warning).' r=Vandalism to [['.$change['title'].']] (#'.$warning.').'."\n");
                                                                                       }
                                                                                       $wpi->post(
                                                                                               'User talk:'.$change['user'],
                                                                                               $tpcontent."\n\n" .
                                                                                               '{{subst:User:'.$user.'/Warnings/Warning|1='.$warning.'|2='.$change['title'].'|3='.$report.' }} The7DeadlySins 23:32, 28 October 2008 (UTC)'."\n",
                                                                                               'Warning [[Special:Contributions/'.$change['user'].'|'.$change['user'].']] - #'.$warning,
                                                                                               false,
                                                                                               null,
                                                                                               false
                                                                                       ); /* Warn the user */
                                                                               } else { /* They have already been reported ... do nothing */
                                                                               }
                                                                               if (!mysql_ping($mysql)) {
                                                                                       $mysql = mysql_pconnect($mysqlhost.':'.$mysqlport,$mysqluser,$mysqlpass);
                                                                                       if (!$mysql) { die('Could not connect: ' . mysql_error()); }
                                                                                       if (!mysql_select_db($mysqldb, $mysql)) { die ('Can\'t use database : ' . mysql_error()); }
                                                                               }
                                                                               mysql_query('UPDATE `vandalism` SET `reverted` = 1 WHERE `id` = \.mysql_real_escape_string($mysqlid).'\);
                                                                       } else {
                                                                               $rv2 = $wpapi->revisions($change['title'],1);
                                                                               if ($change['user'] != $rv2[0]['user']) {
                                                                                       echo 'Grr! Beaten by '.$rv2[0]['user'].".\n";
                                                                                       foreach(explode(',',$ircdebugchannel) as $y) {
                                                                                               fwrite($irc,'PRIVMSG '.$y.' :Grr! Beaten by '.$rv2[0]['user'].".\n");
                                                                                       }
                                                                                       if (!mysql_ping($mysql)) { $mysql = mysql_pconnect($mysqlhost.':'.$mysqlport,$mysqluser,$mysqlpass); mysql_select_db($mysqldb, $mysql); }
                                                                                       mysql_query('INSERT INTO `beaten` (`id`,`article`,`diff`,`user`) VALUES (NULL,\.mysql_real_escape_string($change['title']).'\',\.mysql_real_escape_string($change['url']).'\',\.mysql_real_escape_string($rv2[0]['user']).'\')');
                                                                               }
                                                                       }
                                                               } else {
                                                                       foreach (explode(',',$ircunrevertedchannels) as $y) {
                                                                               fwrite($irc,'PRIVMSG '.$y.' :'."\002\00304Possible ignored vandalism: \002\003[[\00312".$change['title']."\003]]\00304 changed by \003[[\00312User:".$change['user']."\003]] \00303".$reason."\00304 on \00307".$rv[0]['timestamp']."\003(\002\00313".$s."\003).\n");
                                                                               fwrite($irc,'PRIVMSG '.$y.' :'."\002(\002\00312 http://en.wikipedia.org/w/index.php?title=".urlencode($change['title'])."&action=history \003\002|\002\00312 ".$change['url']." \003\002)\002"."\n");
                                                                       }
                                                               }
                                                       } else {
                                                               $rev = $wpapi->revisions($change['title'],1);
                                                               $rev = $rev[0];
                                                               echo 'Possible corrected vandalism: '.$change['title'].' changed by '.$change['user'].' '.$reason.'('.$s.")\n\tReverted by ".$rev['user']." before I saw it.\n";
                                                               foreach (explode(',',$ircdebugchannel) as $y) {
                                                                       fwrite($irc,'PRIVMSG '.$y.' :Possible corrected vandalism: '.$change['title'].' changed by '.$change['user'].' '.$reason.'('.$s.")\n");
                                                                       fwrite($irc,'PRIVMSG '.$y.' :Reverted by '.$rev['user']." before I saw it.\n");
                                                               }
                                                               if (($rev['user'] != $user) and ($rev['user'] != $change['user'])) {
                                                                       if (!mysql_ping($mysql)) { $mysql = mysql_pconnect($mysqlhost.':'.$mysqlport,$mysqluser,$mysqlpass); mysql_select_db($mysqldb, $mysql); }
                                                                       mysql_query('INSERT INTO `beaten` (`id`,`article`,`diff`,`user`) VALUES (NULL,\.mysql_real_escape_string($change['title']).'\',\.mysql_real_escape_string($change['url']).'\',\.mysql_real_escape_string($rev['user']).'\')');
                                                               }
                                                       }
                                               }
                                       }
                                       die();
                               }
                       }
               }
       }

?>

</script>