From d1fc76f5af98ff28ca6405cc5d6f50a3bbf0ac9b Mon Sep 17 00:00:00 2001 From: pk910 Date: Thu, 28 Jul 2011 12:16:10 +0200 Subject: [PATCH] added some more events --- ModCMD/ModCMD.class.php | 77 ++++++++++++++++--------------- Uplink/EventHandler.interface.php | 12 +++-- Uplink/Uplink.class.php | 44 ++++++++++++++++-- 3 files changed, 90 insertions(+), 43 deletions(-) diff --git a/ModCMD/ModCMD.class.php b/ModCMD/ModCMD.class.php index 026b8ae..e1b81cd 100644 --- a/ModCMD/ModCMD.class.php +++ b/ModCMD/ModCMD.class.php @@ -40,11 +40,14 @@ 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++); @@ -101,24 +104,6 @@ class ModCMD implements EventHandler { /******************************************************************************************** * EVENT HANDLER * ********************************************************************************************/ - //All events trigger a binding. You may set the same binding for eg. CHANMODE and USERMODE (or some others) - //to get only one binding for both events... but i think that's senceless - const EVENT_NEWSERVER = BIND_NEWSERVER; - const EVENT_SQUIT = BIND_SQUIT; - const EVENT_CONNECT = BIND_CONNECT; - const EVENT_NICK = BIND_NICK; - const EVENT_USERMODE = BIND_USERMODE; - const EVENT_QUIT = BIND_QUIT; - const EVENT_JOIN = BIND_JOIN; - const EVENT_PART = BIND_PART; - const EVENT_KICK = BIND_KICK; - const EVENT_CHANMODE = BIND_CHANMODE; - const EVENT_CHANMSG = BIND_CHANMSG; - const EVENT_PRIVMSG = BIND_PRIVMSG; - const EVENT_CHANNOTICE = BIND_CHANNOTICE; - const EVENT_PRIVNOTICE = BIND_PRIVNOTICE; - const EVENT_PREPARSE = BIND_PREPARSE; - const EVENT_UNKNOWNCMD = BIND_UNKNOWNCMD; private function event($type, $parameters) { if(array_key_exists($type, self::$bindings)) { @@ -129,67 +114,87 @@ class ModCMD implements EventHandler { } public function event_newserver($server, $isBurst) { - $this->event(self::EVENT_NEWSERVER, array($server, $isBurst)); + $this->event(BIND_NEWSERVER, array($server, $isBurst)); } public function event_squit($server){ - $this->event(self::EVENT_SQUIT, array($server)); + $this->event(BIND_SQUIT, array($server)); } public function event_connect($user, $isBurst) { - $this->event(self::EVENT_CONNECT, array($user, $isBurst)); + $this->event(BIND_CONNECT, array($user, $isBurst)); } public function event_nick($user, $newNick) { - $this->event(self::EVENT_NICK, array($user, $newNick)); + $this->event(BIND_NICK, array($user, $newNick)); } public function event_usermode($user, $modes) { - $this->event(self::EVENT_USERMODE, array($user, $modes)); + $this->event(BIND_USERMODE, array($user, $modes)); } public function event_quit($user, $reason) { - $this->event(self::EVENT_QUIT, array($user, $reason)); + $this->event(BIND_QUIT, array($user, $reason)); } public function event_join($user, $channel, $isBurst) { - $this->event(self::EVENT_JOIN, array($user, $channel, $isBurst)); + $this->event(BIND_JOIN, array($user, $channel, $isBurst)); } public function event_part($user, $channel, $reason) { - $this->event(self::EVENT_PART, array($user, $channel, $reason)); + $this->event(BIND_PART, array($user, $channel, $reason)); } public function event_kick($user, $target, $channel, $reason) { - $this->event(self::EVENT_KICK, array($user, $target, $channel, $reason)); + $this->event(BIND_KICK, array($user, $target, $channel, $reason)); } public function event_chanmode($user, $channel, $modes) { - $this->event(self::EVENT_CHANMODE, array($user, $channel, $modes)); + $this->event(BIND_CHANMODE, array($user, $channel, $modes)); } public function event_chanmessage($user, $channel, $message) { - $this->event(self::EVENT_CHANMSG, array($user, $channel, $message)); + $this->event(BIND_CHANMSG, array($user, $channel, $message)); } public function event_channotice($user, $channel, $message) { - $this->event(self::EVENT_CHANNOTICE, array($user, $channel, $message)); + $this->event(BIND_CHANNOTICE, array($user, $channel, $message)); } - public function event_privmessage($user, $channel, $message) { - $this->event(self::EVENT_PRIVMSG, array($user, $channel, $message)); + public function event_privmessage($user, $target, $message) { + $this->event(BIND_PRIVMSG, array($user, $target, $message)); } - public function event_privnotice($user, $channel, $message) { - $this->event(self::EVENT_PRIVNOTICE, array($user, $channel, $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(self::EVENT_PREPARSE, array($from, $command, $arguments)); + $this->event(BIND_PREPARSE, array($from, $command, $arguments)); } public function event_unknown_cmd($from, $command, $arguments) { - $this->event(self::EVENT_UNKNOWNCMD, array($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)); } } diff --git a/Uplink/EventHandler.interface.php b/Uplink/EventHandler.interface.php index b441841..d4dc99c 100644 --- a/Uplink/EventHandler.interface.php +++ b/Uplink/EventHandler.interface.php @@ -35,6 +35,7 @@ interface EventHandler { public function event_nick($user, $newNick); public function event_usermode($user, $modes); public function event_quit($user, $reason); + public function event_away($user, $away); public function event_join($user, $channel, $isBurst); public function event_part($user, $channel, $reason); @@ -42,9 +43,14 @@ interface EventHandler { public function event_chanmode($user, $channel, $modes); public function event_chanmessage($user, $channel, $message); - public function event_channotice($user, $channel, $message); - public function event_privmessage($user, $channel, $message); - public function event_privnotice($user, $channel, $message); + public function event_channotice($user, $channel, $message); + public function event_chanctcp($user, $channel, $command, $text); + public function event_chanctcpreply($user, $target, $command, $text); + public function event_privmessage($user, $target, $message); + public function event_privnotice($user, $target, $message); + public function event_privctcp($user, $target, $command, $text); + public function event_privctcpreply($user, $target, $command, $text); + public function event_preparse($from, $command, $arguments); public function event_unknown_cmd($from, $command, $arguments); diff --git a/Uplink/Uplink.class.php b/Uplink/Uplink.class.php index 232d976..85adeae 100644 --- a/Uplink/Uplink.class.php +++ b/Uplink/Uplink.class.php @@ -556,14 +556,30 @@ class Uplink { $channel = P10_Channel::getChannelByName($args[0]); if($channel == null) $channel = new P10_Channel($args[0]); - $this->eventHandler->event_chanmessage($user, $channel, $args[1]); + if(strlen($args[1]) > 0 && $args[1][0] == "\001") { + //ctcp + $args[1] = substr($args[1],1); + if($args[1][strlen($args[1])-1] == "\001") + $args[1] = substr($args[1],0,-1); + $ctcpexp = explode(" ",$args[1],2); + $this->eventHandler->event_chanctcp($user, $channel, strtoupper($ctcpexp[0]), (count($ctcpexp) > 1 ? $ctcpexp[1] : null)); + } else + $this->eventHandler->event_chanmessage($user, $channel, $args[1]); } else { $targetUser = P10_User::getUserByNum($args[0]); if($targetUser == null) { trigger_error("Server tries to send a privmsg to an user that does not exist or was not found on recv_privmsg.", E_USER_ERROR); return; } - $this->eventHandler->event_privmessage($user, $targetUser, $args[1]); + if(strlen($args[1]) > 0 && $args[1][0] == "\001") { + //ctcp + $args[1] = substr($args[1],1); + if($args[1][strlen($args[1])-1] == "\001") + $args[1] = substr($args[1],0,-1); + $ctcpexp = explode(" ",$args[1],2); + $this->eventHandler->event_privctcp($user, $targetUser, strtoupper($ctcpexp[0]), (count($ctcpexp) > 1 ? $ctcpexp[1] : null)); + } else + $this->eventHandler->event_privmessage($user, $targetUser, $args[1]); } } } @@ -579,14 +595,30 @@ class Uplink { $channel = P10_Channel::getChannelByName($args[0]); if($channel == null) $channel = new P10_Channel($args[0]); - $this->eventHandler->event_channotice($user, $channel, $args[1]); + if(strlen($args[1]) > 0 && $args[1][0] == "\001") { + //ctcp + $args[1] = substr($args[1],1); + if($args[1][strlen($args[1])-1] == "\001") + $args[1] = substr($args[1],0,-1); + $ctcpexp = explode(" ",$args[1],2); + $this->eventHandler->event_chanctcpreply($user, $channel, strtoupper($ctcpexp[0]), (count($ctcpexp) > 1 ? $ctcpexp[1] : null)); + } else + $this->eventHandler->event_channotice($user, $channel, $args[1]); } else { $targetUser = P10_User::getUserByNum($args[0]); if($targetUser == null) { trigger_error("Server tries to send a notice to an user that does not exist or was not found on recv_notice.", E_USER_ERROR); return; } - $this->eventHandler->event_privnotice($user, $targetUser, $args[1]); + if(strlen($args[1]) > 0 && $args[1][0] == "\001") { + //ctcp + $args[1] = substr($args[1],1); + if($args[1][strlen($args[1])-1] == "\001") + $args[1] = substr($args[1],0,-1); + $ctcpexp = explode(" ",$args[1],2); + $this->eventHandler->event_privctcpreply($user, $targetUser, strtoupper($ctcpexp[0]), (count($ctcpexp) > 1 ? $ctcpexp[1] : null)); + } else + $this->eventHandler->event_privnotice($user, $targetUser, $args[1]); } } } @@ -671,8 +703,12 @@ class Uplink { } if(count($args) > 0) { $user->setAway($args[0]); + if($this->eventHandler) + $this->eventHandler->event_away($user, $args[0]); } else { $user->setAway(null); + if($this->eventHandler) + $this->eventHandler->event_away($user, null); } } -- 2.20.1