rendered paste body private function event_parse($line) { $parts = explode(" ", $line); if(substr($parts[0], 0, 1) == ":") $sender = substr(array_shift($parts), 1); $type = array_shift($parts); $data = array(); switch($type) { case "PING": list($pong) = $parts; $data["pong"] = substr($pong, 1); $this->event_reply($type, $data); break; case "NETINFO": $this->event_log("NETINFO Event Matched"); list($max_global_count, $server_time, $server_protocol, $md5, , , , $server_network) = $parts; $this->_protocol = $server_protocol; $this->_network_name = $server_network; $data["md5"] = $md5; $this->event_reply($type, $data); break; case "NICK": // $data[0] = $nick if(!isset($sender)) { @list($data[0], $hops, $timestamp, $data["username"], $data["host"], $data["server"], $service_stamp, $data["umodes"], $data["vhost"], $data["info"]) = $parts; $data = array_reverse($data); $data["info"] = substr($data["info"], 1); } else { $data[0] = $sender; list($data["newnick"], $timestamp) = $parts; } $this->event_reply($type, $data); break; case "SJOIN": // timestamp channel :nick list($timestamp, $channel, $nick) = $parts; $data[0] = preg_replace("#[\~\&\@\%\+]#", "", substr($nick, 1)); $data["channel"] = $channel; $this->event_reply($type, $data); break; case "JOIN": // channel, channel $data[0] = $sender; $data["channel"] = $parts[0]; $this->event_reply($type, $data); break; case "PART": @list($channel, $reason) = $parts; $data[0] = $sender; $data["channel"] = $channel; $this->event_reply($type, $data); break; case "QUIT": $data[0] = $sender; $this->event_reply($type, $data); break; case "PRIVMSG": array_unshift($parts, $sender); $this->event_reply($type, $parts); break; } } private function event_reply($type, $data) { switch($type) { case "PING": $this->event_log("PING Event Reply"); $this->_send("PONG ".$data["pong"], true); break; case "NETINFO": $time = time(); $this->event_log("NETINFO Event Reply"); $this->_send("NETINFO 0 ".$time." ".$this->_protocol." ".$data["md5"]." 0 0 0 ".$this->_network_name, true); $this->_send(":".$this->_server_name." NICK ".$this->snick." 0 ".$time." ".$this->sident." ".$this->shost." ".$this->_server_name." 0 +i * :".$this->sdesc, true); $this->_send(":".$this->snick." UMODE2 +SB"); foreach($this->schannels as $chan) $this->_send(":".$this->snick." JOIN ".$chan); break; case "NICK": $this->event_log("NICK Event Handled"); $nick = array_shift($data); if(isset($this->nicks[$nick])) { $oldnicks = $this->nicks[$nick]; unset($this->nicks[$nick]); $this->nicks[$data["newnick"]] = $oldnicks; $oldchannels = $this->channels[$nick]; unset($this->channels[$nick]); $this->channels[$data["newnick"]] = $oldchannels; } else $this->nicks[$nick] = $data; break; case "SJOIN": $this->event_log("SJOIN Event Handled"); $nick = array_shift($data); if(isset($this->channels[$nick])) $this->channels[$nick]["channels"] .= ",".$data["channel"]; else $this->channels[$nick]["channels"] = $data["channel"]; break; case "JOIN": $this->event_log("JOIN Event Handled"); $nick = array_shift($data); if(isset($this->channels[$nick])) $this->channels[$nick]["channels"] .= ",".$data["channel"]; else $this->channels[$nick]["channels"] = $data["channel"]; break; case "PART": $this->event_log("PART Event Handled"); if(trim($data["channel"]) != "") { $nick = array_shift($data); $chans = $this->channels[$nick]["channels"]; $this->channels[$nick]["channels"] = trim(str_replace($data["channel"], "", $chans), ","); } break; case "QUIT": $this->event_log("QUIT Event Handled"); $nick = array_shift($data); unset($this->channels[$nick]); unset($this->nicks[$nick]); break; case "PRIVMSG": list($nick, $channel, $trigger) = $data; if(substr($trigger, 0, 2) == ":!") { $this->event_log("PRIVMSG Event Reply"); if($channel == $this->snick) //if we have a privmsg in query $this->event_action("query", $data); else $this->event_action("channel", $data); } break; } }