All pastes #67621 Raw Edit

Someone

public php v1 · immutable
#67621 ·published 2006-06-20 10:34 UTC
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;    }  }