/**
  * Handles joins on channels registered with chanserv
  * @param	string	$data
  */
 public function handleJoin($data)
 {
     // get chanserv address
     $chanserv = Services::getModuleManager()->lookupModule('ChanServ');
     // check for registered channel
     if (call_user_func(array($chanserv, 'isRegistered'), $data['channel'])) {
         foreach ($data['userList'] as $user) {
             // get user from array
             $user = $user['user'];
             // get channel access
             $access = Services::getModuleManager()->getBot($chanserv)->getAccess($data['channel'], $user->accountname);
             if ($access >= 500) {
                 Services::getConnection()->getProtocol()->sendMode(Services::getModuleManager()->getBot($chanserv)->getUuid(), $data['channel'], '+q ' . $user->getNick());
             } else {
                 if ($access >= Services::getModuleManager()->getBot($chanserv)->getNeededAccess($data['channel'], 'getOp')) {
                     Services::getConnection()->getProtocol()->sendMode(Services::getModuleManager()->getBot($chanserv)->getUuid(), $data['channel'], '+o ' . $user->getNick());
                 } else {
                     if ($access >= Services::getModuleManager()->getBot($chanserv)->getNeededAccess($data['channel'], 'getVoice')) {
                         Services::getConnection()->getProtocol()->sendMode(Services::getModuleManager()->getBot($chanserv)->getUuid(), $data['channel'], '+v ' . $user->getNick());
                     }
                 }
             }
         }
     }
 }
 /**
  * @see lib/modules/CommandModule::execute()
  */
 public function execute($user, $target, $message)
 {
     $messageEx = explode(' ', $message);
     unset($messageEx[0]);
     // quit with a nice message
     if (count($messageEx)) {
         Services::getModuleManager()->shutdown(implode(' ', $messageEx));
     } else {
         Services::getModuleManager()->shutdown();
     }
     exit;
 }
 /**
  * Handles an incoming KICK event
  * @param	array	$data
  */
 public function handleKick($data)
 {
     // get chanserv
     $chanserv = Services::getModuleManager()->lookupModule('ChanServ');
     // ignore unregistered channels
     if (call_user_func(array($chanserv, 'isRegistered'), $data['target'])) {
         // check permissions
         if (call_user_func(array($chanserv, 'getAccess'), $data['target'], Services::getUserManager()->getUser($data['issuer'])->accountname) < call_user_func(array($chanserv, 'getAccess'), $data['target'], Services::getUserManager()->getUser($data['victim'])->accountname) || call_user_func(array($chanserv, 'getAccess'), $data['target'], Services::getUserManager()->getUser($data['issuer'])->accountname) < call_user_func(array($chanserv, 'kick'), $data['target'])) {
             // rejoin victim if needed
             Services::getConnection()->getProtocol()->sendSvsjoin($data['victim'], $data['target']);
         }
     }
 }
 /**
  * @see lib/modules/CommandModule::execute()
  */
 public function execute($user, $target, $message)
 {
     // split message
     $messageEx = explode(' ', $message);
     // BIND <bot> <module> <command> <appearInHelp>
     if (count($messageEx) >= 3) {
         $botAddress = Services::getModuleManager()->lookupModule($messageEx[1]);
         $moduleAddress = Services::getModuleManager()->lookupModule($messageEx[2]);
         $commandName = $messageEx[3];
         $appearInHelp = (bool) (isset($messageEx[4]) ? $messageEx[4] : true);
         Services::getModuleManager()->bindCommand($botAddress, $moduleAddress, $commandName, $appearInHelp);
         $this->bot->sendMessage($user->getUuid(), Services::getLanguage()->get($user->languageID, 'command.' . $this->originalName . '.success'));
     } else {
         // send syntax hint
         $this->bot->sendMessage($user->getUuid(), Services::getLanguage()->get($user->languageID, 'command.' . $this->originalName . '.syntaxHint'));
     }
 }
 /**
  * @see lib/modules/CommandModule::execute()
  */
 public function execute($user, $target, $message)
 {
     // split message
     $messageEx = explode(' ', $message);
     if (count($messageEx) == 2 and !empty($messageEx[1])) {
         // get module name
         $moduleName = $messageEx[1];
         try {
             // try to load module
             Services::getModuleManager()->loadModule(SDIR . 'lib/modules/' . ucfirst($moduleName) . '.class.php');
         } catch (Exception $ex) {
             $this->bot->sendMessage($user->getUuid(), Services::getLanguage()->get($user->languageID, 'command.' . $this->originalName . '.cannotLoad', $ex->getMessage()));
         }
     } else {
         // send syntax hint
         $this->bot->sendMessage($user->getUuid(), Services::getLanguage()->get($user->languageID, 'command.' . $this->originalName . '.syntaxHint'));
     }
 }
 /**
  * @see lib/modules/CommandModule::execute()
  */
 public function execute($user, $target, $message)
 {
     // split message
     $messageEx = explode(' ', $message);
     if ($target[0] != '#') {
         $target = $messageEx[1];
         unset($messageEx[1]);
         $messageEx = array_values($messageEx);
     }
     $access = $this->bot->getAccess($target, Services::getUserManager()->getUser($user->getUuid())->accountname);
     if ($access < $this->bot->getNeededAccess($target, 'access')) {
         return $this->bot->sendMessage($user->getUuid(), Services::getLanguage()->get($user->languageID, 'command.permissionDenied'));
     }
     if (count($messageEx) == 3) {
         if ($messageEx[2] >= $access) {
             return $this->bot->sendMessage($user->getUuid(), Services::getLanguage()->get($user->languageID, 'command.' . $this->originalName . '.tooHigh'));
         } else {
             if ($messageEx[2] > 500) {
                 return $this->bot->sendMessage($user->getUuid(), Services::getLanguage()->get($user->languageID, 'command.' . $this->originalName . '.tooHigh'));
             }
         }
         if ($access <= $this->bot->getAccess($target, Services::getUserManager()->getUserByNick($messageEx[1])->accountname)) {
             return $this->bot->sendMessage($user->getUuid(), Services::getLanguage()->get($user->languageID, 'command.permissionDenied'));
         }
         $authServ = Services::getModuleManager()->lookupModule('AuthServ');
         $userID = call_user_func(array($authServ, 'getUserID'), $messageEx[1]);
         if (!$userID) {
             return $this->bot->sendMessage($user->getUuid(), Services::getLanguage()->get($user->languageID, 'command.invalidUser'));
         }
         if ($messageEx[0] < 1) {
             $sql = "DELETE FROM chanserv_channels_to_users WHERE channel = '" . escapeString($target) . "' AND userID = " . $userID;
         } else {
             $sql = "INSERT INTO chanserv_channels_to_users (channel, userID, accessLevel)\n\t\t\t\t\tVALUES ('" . escapeString($target) . "', " . $userID . ", " . intval($messageEx[2]) . ")\n\t\t\t\t\tON DUPLICATE KEY UPDATE accessLevel = VALUES(accessLevel)";
         }
         Services::getDB()->sendQuery($sql);
         $this->bot->sendMessage($user->getUuid(), Services::getLanguage()->get($user->languageID, 'command.' . $this->originalName . '.success'));
     } else {
         $this->bot->sendMessage($user->getUuid(), Services::getLanguage()->get($user->languageID, 'command.' . $this->originalName . '.syntaxHint'));
     }
 }
 /**
  * Handles the PRIVMSG command
  *
  * @param	string		$input
  * @param	array<string>	$inputEx
  * @return	void
  */
 public static function PRIVMSG($input, $inputEx)
 {
     if ($inputEx[2][0] != '$') {
         // get source
         $source = Services::getUserManager()->getUser($inputEx[0]);
         if ($inputEx[2][0] == '#' and $source !== null) {
             // send debug message
             if (defined('DEBUG')) {
                 Services::getConnection()->getProtocol()->sendLogLine($source->getUuid() . " (" . $source->getNick() . ") sent a message to " . $inputEx[2]);
             }
             // notify module manager
             Services::getModuleManager()->handleLine($source, $inputEx[2], substr($input, stripos($input, ':') + 1));
         } elseif ($source) {
             // kick numeric
             $inputEx[2] = substr($inputEx[2], strlen(Services::getConnection()->getProtocol()->numeric));
             // send debug message
             if (defined('DEBUG')) {
                 Services::getConnection()->getProtocol()->sendLogLine($source->getUuid() . " (" . $source->getNick() . ") sent a message to " . $inputEx[2]);
             }
             // try to find bot
             if (($bot = Services::getBotManager()->getUser($inputEx[2])) !== null) {
                 // resolved uuid ... send debug message
                 if (defined('DEBUG')) {
                     Services::getConnection()->getProtocol()->sendLogLine("Resolved " . $inputEx[2] . " to " . $bot->getNick());
                 }
                 // notify module manager
                 Services::getModuleManager()->handleLine($source, $inputEx[2], substr($input, stripos($input, ':') + 1));
             } else {
                 // cannot find user ... send debug message
                 if (defined('DEBUG')) {
                     Services::getConnection()->getProtocol()->sendLogLine("Cannot resolve '" . $inputEx[2] . "'! Type of return value: " . gettype($bot));
                 }
             }
         } else {
             Services::getConnection()->getProtocol()->sendLogLine("Received invalid UUID '" . $inputEx[0] . "'! Maybe choosen wrong IRCd?");
         }
     }
 }
 /**
  * Registers the channel with chanserv
  *
  * @param	string	$channel
  * @param	string	$accountname
  * @return	void
  */
 public function register($channel, $accountname)
 {
     $authServ = Services::getModuleManager()->lookupModule('AuthServ');
     $userID = call_user_func(array($authServ, 'getUserID'), $accountname);
     $sql = "INSERT INTO chanserv_channels (channel, modes, time, registrar, unregistercode) VALUES ('" . escapeString($channel) . "', '+tnr', " . time() . ", " . $userID . ", '" . StringUtil::getRandomID() . "')";
     Services::getDB()->sendQuery($sql);
     $sql = "INSERT INTO chanserv_channels_to_users (channel, userID, accessLevel) VALUES ('" . escapeString($channel) . "', " . $userID . ", 500)";
     Services::getDB()->sendQuery($sql);
     $values = '';
     $sql = "SELECT\r\n\t\t\t\t*\r\n\t\t\tFROM\r\n\t\t\t\tchanserv_default_accessLevel";
     $result = Services::getDB()->sendQuery($sql);
     while ($row = Services::getDB()->fetchArray($result)) {
         if ($values != '') {
             $values .= ',';
         }
         $values .= "('" . escapeString($channel) . "', '" . $row['function'] . "', " . $row['accessLevel'] . ")";
     }
     $sql = "INSERT INTO chanserv_channel_accessLevel (channel, function, accessLevel) VALUES " . $values;
     Services::getDB()->sendQuery($sql);
     // join the channel
     $this->join($channel);
     // set modes
     $this->setStandardModes($channel, '+tnr');
 }
 /**
  * Checks for needed permissions and returns true if correct permissions are set
  *
  * @param 	UserType	$user
  * @param	integer		$neededPermissions
  * @return	boolean
  */
 public function getPermissions(UserType $user, $neededPermissions)
 {
     // when 0 always is okay
     if ($neededPermissions == 0) {
         return true;
     }
     // handle empty account names
     //if ($user->accountname === null or $user->accountname != '') return false;
     // check for correct level
     if (call_user_func(array(Services::getModuleManager()->lookupModule('AuthServ'), 'getAccessLevel'), $user->accountname) >= $neededPermissions) {
         return true;
     }
     return false;
 }