public static function processEdit($change)
 {
     if (time() - Globals::$tfas >= 1800 and preg_match('/\\(\'\'\'\\[\\[([^|]*)\\|more...\\]\\]\'\'\'\\)/iU', Api::$q->getpage('Wikipedia:Today\'s featured article/' . date('F j, Y')), $tfam)) {
         Globals::$tfas = time();
         Globals::$tfa = $tfam[1];
     }
     if (Config::$fork) {
         $pid = pcntl_fork();
         if ($pid != 0) {
             echo 'Forked - ' . $pid . "\n";
             return;
         }
     }
     $change = parseFeedData($change);
     $change['justtitle'] = $change['title'];
     if (in_array('namespace', $change) && $change['namespace'] != 'Main:') {
         $change['title'] = $change['namespace'] . $change['title'];
     }
     self::processEditThread($change);
     if (Config::$fork) {
         die;
     }
 }
 public static function shouldRevert($change)
 {
     $reason = 'Default revert';
     if (preg_match('/(assisted|manual)/iS', Config::$status)) {
         echo 'Revert [y/N]? ';
         if (strtolower(substr(fgets(Globals::$stdin, 3), 0, 1)) != 'y') {
             return array(false, 'Manual mode says no');
         }
     }
     if (!preg_match('/(yes|enable|true)/iS', Globals::$run)) {
         return array(false, 'Run disabled');
     }
     if ($change['user'] == Config::$user) {
         return array(false, 'User is myself');
     }
     if (Config::$angry) {
         return array(true, 'Angry-reverting in angry mode');
     }
     if (time() - Globals::$tfas >= 1800) {
         if (preg_match('/\\(\'\'\'\\[\\[([^|]*)\\|more...\\]\\]\'\'\'\\)/iU', Api::$q->getpage('Wikipedia:Today\'s featured article/' . date('F j, Y')), $tfam)) {
             Globals::$tfas = time();
             Globals::$tfa = $tfam[1];
         }
     }
     if (!self::findAndParseBots($change)) {
         return array(false, 'Exclusion compliance');
     }
     if ($change['all']['user'] == $change['all']['common']['creator']) {
         return array(false, 'User is creator');
     }
     if ($change['all']['user_edit_count'] > 50) {
         if ($change['all']['user_warns'] / $change['all']['user_edit_count'] < 0.1) {
             return array(false, 'User has edit count');
         } else {
             $reason = 'User has edit count, but warns > 10%';
         }
     }
     if (Globals::$tfa == $change['title']) {
         return array(true, 'Angry-reverting on TFA');
     }
     if (preg_match('/\\* \\[\\[(' . preg_quote($change['title'], '/') . ')\\]\\] \\- .*/i', Globals::$aoptin)) {
         IRC::say('debugchannel', 'Angry-reverting [[' . $change['title'] . ']].');
         return array(true, 'Angry-reverting on angry-optin');
     }
     $titles = unserialize(file_get_contents('titles.txt'));
     if (!isset($titles[$change['title'] . $change['user']]) or time() - $titles[$change['title'] . $change['user']] > 24 * 60 * 60) {
         $titles[$change['title'] . $change['user']] = time();
         file_put_contents('titles.txt', serialize($titles));
         return array(true, $reason);
     }
     return array(false, 'Reverted before');
 }