Exemple #1
0
 /**
  *	This method returns an array of user criteria and channels,
  *	that is used to match users in the query.
  */
 private static function generateSearchCriteria($sQueryString)
 {
     $pInstance = Core::getCurrentInstance();
     $aChannels = array();
     $aCriteria = array("Nickname" => "%", "Username" => "%", "Hostname" => "%");
     # Determinate channel selector and query separator.
     if (preg_match('/^[\\s]{0,}(.*?)[\\s]{0,}\\:[\\s]{0,}(.*?)[\\s]{0,}$/', preg_quote($sQueryString), $aParts)) {
         $sQueryString = stripslashes($aParts[1]);
         $sCSelectorList = stripslashes($aParts[2]);
         $sPrefixes = $pInstance->getServerConfiguration("PREFIX");
         $sPrefix = substr($sPrefixes, strpos($sPrefixes, ")") + 1);
         $sChanTypes = preg_quote($pInstance->getServerConfiguration("CHANTYPES"));
         $sChannelPattern = "/^([\\^]{0,1})([{$sPrefix}]{0,})([{$sChanTypes}])(.*)\$/";
         foreach (explode(',', $sCSelectorList) as $sSelector) {
             $sSelector = trim($sSelector);
             $aSelector = explode(' ', $sSelector);
             $iSelectorCount = count($aSelector);
             $aChannelElements = array();
             foreach ($aSelector as $sChannel) {
                 if (preg_match($sChannelPattern, $sChannel, $aMatches)) {
                     $aChannelElements[] = (object) array("Channel" => $pInstance->getChannel("{$aMatches[3]}{$aMatches[4]}"), "Modes" => preg_split('//', CoreUtilities::modeCharToLetter($aMatches[2]), -1, PREG_SPLIT_NO_EMPTY), "Negation" => $aMatches[1] == "^");
                 }
             }
             $aChannels[] = $aChannelElements;
         }
     }
     # Username selector.
     if (preg_match('/^!(.*?)$/', $sQueryString, $aParts)) {
         $aCriteria = array("Nickname" => "%", "Username" => trim($aParts[1]), "Hostname" => "%");
     } elseif (preg_match('/^@(.*?)$/', $sQueryString, $aParts)) {
         $aCriteria = array("Nickname" => "%", "Username" => "%", "Hostname" => trim($aParts[1]));
     } elseif (preg_match('/^(.*?)!(.*?)@(.*?)$/', $sQueryString, $aParts)) {
         $aCriteria = array("Nickname" => trim($aParts[1]), "Username" => trim($aParts[2]), "Hostname" => trim($aParts[3]));
     } elseif (preg_match('/^(.*?)@(.*?)$/', $sQueryString, $aParts)) {
         $aCriteria = array("Nickname" => "%", "Username" => trim($aParts[1]), "Hostname" => trim($aParts[2]));
     } elseif (preg_match('/^(.*?)$/', $sQueryString, $aParts)) {
         $aCriteria = array("Nickname" => trim($aParts[1]), "Username" => "%", "Hostname" => "%");
     }
     return array($aChannels, $aCriteria);
 }
Exemple #2
0
 /**
  *	Called when we recieve a NAMES response.
  *	Numeric: 353 - NAMES response.
  */
 public static function N353(CoreMaster $pInstance, MessageObject $pMessage)
 {
     $aUserList = explode(' ', trim($pMessage->Payload));
     $pChannel = $pInstance->getChannel($pMessage->Parts[4]);
     foreach ($aUserList as $sNickname) {
         preg_match("/[+%@&~]/", trim($sNickname), $aChannelModes);
         $sChannelMode = CoreUtilities::modeCharToLetter(implode("", $aChannelModes));
         $sNickname = preg_replace("/[+%@&~]/", "", $sNickname);
         $pChannel->addUserToChannel($sNickname, $sChannelMode);
         $pInstance->getUser($sNickname);
     }
 }