private static function loop($line) { $d = IRC::split($line); if ($d === null) { return; } if ($d['type'] == 'direct') { switch ($d['command']) { case 'ping': self::send('PONG :' . $d['pieces'][0]); break; } } else { switch ($d['command']) { case '376': case '422': self::send('JOIN ' . self::$channel); break; case 'privmsg': if (strtolower($d['target']) == self::$channel) { $rawmessage = $d['pieces'][0]; $message = str_replace("", '', $rawmessage); $message = preg_replace('/\\003(\\d\\d?(,\\d\\d?)?)?/', '', $message); $data = parseFeed($message); if ($data === false) { return; } $data['line'] = $message; $data['rawline'] = $rawmessage; if (stripos('N', $data['flags']) !== false) { self::bail($data, 'New article'); return; } $stalkchannel = array(); foreach (Globals::$stalk as $key => $value) { if (myfnmatch(str_replace('_', ' ', $key), str_replace('_', ' ', $data['user']))) { $stalkchannel = array_merge($stalkchannel, explode(',', $value)); } } foreach (Globals::$edit as $key => $value) { if (myfnmatch(str_replace('_', ' ', $key), str_replace('_', ' ', ($data['namespace'] == 'Main:' ? '' : $data['namespace']) . $data['title']))) { $stalkchannel = array_merge($stalkchannel, explode(',', $value)); } } $stalkchannel = array_unique($stalkchannel); foreach ($stalkchannel as $chan) { IRC::say($chan, 'New edit: [[' . ($data['namespace'] == 'Main:' ? '' : $data['namespace']) . $data['title'] . ']] https://en.wikipedia.org/w/index.php?title=' . urlencode($data['namespace'] . $data['title']) . '&diff=prev&oldid=' . urlencode($data['revid']) . ' * ' . $data['user'] . ' * ' . $data['comment']); } switch ($data['namespace'] . $data['title']) { case 'User:'******'/Run': Globals::$run = Api::$q->getpage('User:'******'/Run'); break; case 'Wikipedia:Huggle/Whitelist': Globals::$wl = Api::$q->getpage('Wikipedia:Huggle/Whitelist'); break; case 'User:'******'/Optin': Globals::$optin = Api::$q->getpage('User:'******'/Optin'); break; case 'User:'******'/AngryOptin': Globals::$aoptin = Api::$q->getpage('User:'******'/AngryOptin'); break; } if ($data['namespace'] != 'Main:' and !preg_match('/\\* \\[\\[(' . preg_quote($data['namespace'] . $data['title'], '/') . ')\\]\\] \\- .*/i', Globals::$optin)) { self::bail($data, 'Outside of valid namespaces'); return; } echo 'Processing: ' . $message . "\n"; Process::processEdit($data); } break; } } }