match($bot, $method)) return; } } else self::$bindings[$type] = array(); self::$bindings[$type][] = new Binding($bot, $method); } } public static function unbind($bot, $type, $method) { if(is_a($bot, "Bot")) { if(array_key_exists($type, self::$bindings)) { foreach(self::$bindings[$type] as $id => $binding) { if($binding->match($bot, $method)) { unset(self::$bindings[$type][$id]); break; } } } } } public static function unbindBot($bot) { if(is_a($bot, "Bot")) { foreach(self::$bindings as $type => $bindings) { foreach($bindings as $id => $binding) { if($binding->match($bot, null)) { unset(self::$bindings[$type][$id]); } } } } } /******************************************************************************************** * EVENT HANDLER * ********************************************************************************************/ private function event($type, $parameters) { if(array_key_exists($type, self::$bindings)) { foreach(self::$bindings[$type] as $binding) { $binding->trigger($parameters); } } } public function event_newserver($server, $isBurst) { $this->event(BIND_NEWSERVER, array($server, $isBurst)); } public function event_squit($server){ $this->event(BIND_SQUIT, array($server)); } public function event_connect($user, $isBurst) { $this->event(BIND_CONNECT, array($user, $isBurst)); } public function event_nick($user, $newNick) { $this->event(BIND_NICK, array($user, $newNick)); } public function event_usermode($user, $modes) { $this->event(BIND_USERMODE, array($user, $modes)); } public function event_quit($user, $reason) { $this->event(BIND_QUIT, array($user, $reason)); } public function event_join($user, $channel, $isBurst) { $this->event(BIND_JOIN, array($user, $channel, $isBurst)); } public function event_part($user, $channel, $reason) { $this->event(BIND_PART, array($user, $channel, $reason)); } public function event_kick($user, $target, $channel, $reason) { $this->event(BIND_KICK, array($user, $target, $channel, $reason)); } public function event_chanmode($user, $channel, $modes) { $this->event(BIND_CHANMODE, array($user, $channel, $modes)); } public function event_chanmessage($user, $channel, $message) { $this->event(BIND_CHANMSG, array($user, $channel, $message)); } public function event_channotice($user, $channel, $message) { $this->event(BIND_CHANNOTICE, array($user, $channel, $message)); } public function event_privmessage($user, $target, $message) { $this->event(BIND_PRIVMSG, array($user, $target, $message)); } public function event_privnotice($user, $target, $message) { $this->event(BIND_PRIVNOTICE, array($user, $target, $message)); } public function event_preparse($from, $command, $arguments) { $this->event(BIND_PREPARSE, array($from, $command, $arguments)); } public function event_unknown_cmd($from, $command, $arguments) { $this->event(BIND_UNKNOWNCMD, array($from, $command, $arguments)); } public function event_chanctcp($user, $channel, $command, $text) { $this->event(BIND_CTCP, array($user, $channel, $command, $text, true)); } public function event_chanctcpreply($user, $target, $command, $text) { $this->event(BIND_CTCPREPLY, array($user, $channel, $command, $text, true)); } public function event_privctcp($user, $target, $command, $text) { $this->event(BIND_CTCP, array($user, $channel, $command, $text, false)); } public function event_privctcpreply($user, $target, $command, $text) { $this->event(BIND_CTCPREPLY, array($user, $channel, $command, $text, false)); } public function event_away($user, $away) { $this->event(BIND_AWAY, array($user, $away)); } } ?>