. * * * ************************************************************************ * * ModCMD/ModCMD.class.php * * shares the incoming events to all bot's that request them. * */ require_once("Binding.class.php"); $bindid = 1; define("BIND_NEWSERVER", $bindid++); define("BIND_SQUIT", $bindid++); define("BIND_CONNECT", $bindid++); define("BIND_NICK", $bindid++); define("BIND_USERMODE", $bindid++); define("BIND_QUIT", $bindid++); define("BIND_JOIN", $bindid++); define("BIND_PART", $bindid++); define("BIND_KICK", $bindid++); define("BIND_AWAY", $bindid++); define("BIND_CHANMODE", $bindid++); define("BIND_CHANMSG", $bindid++); define("BIND_PRIVMSG", $bindid++); define("BIND_CHANNOTICE", $bindid++); define("BIND_PRIVNOTICE", $bindid++); define("BIND_CTCP", $bindid++); define("BIND_CTCPREPLY", $bindid++); define("BIND_PREPARSE", $bindid++); define("BIND_UNKNOWNCMD", $bindid++); class ModCMD implements EventHandler { private static $eventHandler = null; private static $bindings = array(); public static function getEventHandler() { if(self::$eventHandler == null) { self::$eventHandler = new ModCMD(); } return self::$eventHandler; } public static function bind($bot, $type, $method, $filter = NULL) { if(is_a($bot, "Bot") && method_exists($bot, $method)) { if(array_key_exists($type, self::$bindings)) { foreach(self::$bindings[$type] as $binding) { if($binding->match($bot, $method, $filter)) return; } } else self::$bindings[$type] = array(); self::$bindings[$type][] = new Binding($bot, $method, $filter); } } public static function unbind($bot, $type, $method, $filter = NULL) { if(is_a($bot, "Bot")) { if(array_key_exists($type, self::$bindings)) { foreach(self::$bindings[$type] as $id => $binding) { if($binding->match($bot, $method, $filter)) { 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, null)) { unset(self::$bindings[$type][$id]); } } } } } /******************************************************************************************** * EVENT HANDLER * ********************************************************************************************/ private function event($type, $parameters, $matchings = array(null)) { if(array_key_exists($type, self::$bindings)) { foreach(self::$bindings[$type] as $binding) { $match = false; foreach($matchings as $matching) { if(($match = $binding->match_filter($matching))) break; } if($match) $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), array($user, $channel)); } public function event_part($user, $channel, $reason) { $this->event(BIND_PART, array($user, $channel, $reason), array($user, $channel)); } public function event_kick($user, $target, $channel, $reason) { $this->event(BIND_KICK, array($user, $target, $channel, $reason), array($user, $channel, $target)); } public function event_chanmode($user, $channel, $modes) { $this->event(BIND_CHANMODE, array($user, $channel, $modes), array($user, $channel)); } public function event_chanmessage($user, $channel, $message) { $this->event(BIND_CHANMSG, array($user, $channel, $message), array($user, $channel)); } public function event_channotice($user, $channel, $message) { $this->event(BIND_CHANNOTICE, array($user, $channel, $message), array($user, $channel)); } public function event_privmessage($user, $target, $message) { $this->event(BIND_PRIVMSG, array($user, $target, $message), array($user, $target)); } public function event_privnotice($user, $target, $message) { $this->event(BIND_PRIVNOTICE, array($user, $target, $message), array($user, $target)); } public function event_preparse($from, $command, $arguments) { $this->event(BIND_PREPARSE, array($from, $command, $arguments), array($command)); } public function event_unknown_cmd($from, $command, $arguments) { $this->event(BIND_UNKNOWNCMD, array($from, $command, $arguments), array($command)); } public function event_chanctcp($user, $channel, $command, $text) { $this->event(BIND_CTCP, array($user, $channel, $command, $text, true)); } public function event_chanctcpreply($user, $channel, $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, $target, $command, $text, false)); } public function event_privctcpreply($user, $target, $command, $text) { $this->event(BIND_CTCPREPLY, array($user, $target, $command, $text, false)); } public function event_away($user, $away) { $this->event(BIND_AWAY, array($user, $away)); } } ?>