set UMode +r on AC (ACCOUNT) RAW
[PHP-P10.git] / Uplink / Uplink.class.php
index e2c2c03cbef4ddb3c538c26682cccfcbc8bb049b..d90324bf3e6e30bfb08ce5c1e4102c59232e7df5 100644 (file)
@@ -253,6 +253,9 @@ class Uplink {
                        case "OM":
                                $this->recv_mode($from, $arguments);
                                break;
+            case "AC":
+                               $this->recv_account($from, $arguments);
+                               break;
                //default
                        default:
                                //unknown cmd
@@ -417,7 +420,6 @@ class Uplink {
                $channel->setCreateTime($create_time);
                $modes = $channel->getModes();
                $userstr = $args[count($args)-1];
-               $modeparamcount = count($args)-3;
                if($userstr[0] == "%") {
                        //ban list
                        $banlist = explode(" ", substr($userstr, 1));
@@ -425,10 +427,8 @@ class Uplink {
                                //TODO: save bans
                        }
                        $userstr = $args[count($args)-2];
-                       $modeparamcount--;
                }
                if($userstr[0] == "+") { //MODE String
-                       $modeparamcount++;
                        $userstr = "";
                }
                $users = explode(",",$userstr);
@@ -437,8 +437,8 @@ class Uplink {
                        if($user == "") continue;
                        $uexp = explode(":", $user);
                        if(strlen($uexp[0]) != 5) {
-                               trigger_error("burst parse error: '".$uexp[0]."' is not an user numeric.", E_USER_ERROR);
-                               return;
+                               trigger_error("burst parse error: '".$uexp[0]."' is not an user numeric.", E_USER_WARNING);
+                               break;
                        }
                        if(count($uexp) > 1) {
                                $isop = false;
@@ -457,7 +457,9 @@ class Uplink {
                        if($this->eventHandler)
                                $this->eventHandler->event_join($user, $channel, true);
                }
-               $modes->parseModes(implode(" ", array_slice($args, 2, $modeparamcount)));
+               $modestr = array_slice($args, 2);
+               if($modestr[0] == "+")
+                       $modes->parseModes(implode(" ", $modestr));
        }
        
        private function recv_join($from, $args) {
@@ -693,7 +695,7 @@ class Uplink {
        
        private function recv_mode($from, $args) {
                $user = P10_User::getUserByNum($from);
-               if($user == null) {
+               if($user == null && strlen($from) != 2) {
                        trigger_error("Server tries to send a modechange from an user that does not exist or was not found on recv_mode.", E_USER_ERROR);
                        return;
                }
@@ -703,7 +705,7 @@ class Uplink {
                        if($channel == null)
                                $channel = new P10_Channel($args[0]);
                        $channel->getModes()->setModes($modes);
-                       if($this->eventHandler)
+                       if($this->eventHandler && strlen($from) != 2)
                                $this->eventHandler->event_chanmode($user, $channel, $modes);
                } else {
                        $targetUser = P10_User::getUserByNick($args[0]);
@@ -716,6 +718,18 @@ class Uplink {
                                $this->eventHandler->event_usermode($targetUser, $modes);
                }
        }
+    
+    private function recv_account($from, $args) {
+               $user = P10_User::getUserByNum($args[0]);
+               if($user == null) {
+                       trigger_error("Server tries to send an auth announce from an user that does not exist or was not found on recv_account.", E_USER_ERROR);
+                       return;
+               }
+               $auth = $args[1];
+               $user->getModes()->setModes("+r ".$auth);
+        if($this->eventHandler)
+            $this->eventHandler->event_usermode($user, "+r ".$auth);
+       }
        
        /********************************************************************************************
         *                                     SERVER FUNCTIONS                                     *