Esempio n. 1
0
 public static function ghost_command($nick, $ircdata = array())
 {
     $unick = $ircdata[0];
     $password = $ircdata[1];
     // get the parameters.
     if (trim($unick) == '' || trim($password) == '') {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INVALID_SYNTAX_RE, array('help' => 'GHOST'));
         return false;
     }
     // invalid syntax
     if (!isset(core::$nicks[$unick])) {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_NOT_IN_USE, array('nick' => $unick));
         return false;
         // nickname isn't in use
     }
     if ($user = services::user_exists($unick, false, array('display', 'pass', 'salt'))) {
         if ($user->pass == sha1($password . $user->salt) || core::$nicks[$nick]['ircop'] && services::user_exists($nick, true, array('display', 'identified')) !== false) {
             ircd::kill(core::$config->nickserv->nick, $unick, 'GHOST command used by ' . core::get_full_hostname($nick));
             core::alog(core::$config->nickserv->nick . ': GHOST command used on ' . $unick . ' by ' . core::get_full_hostname($nick));
         } else {
             services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INVALID_PASSWORD);
             // password isn't correct
         }
     } else {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_ISNT_REGISTERED, array('nick' => $unick));
         return false;
         // doesn't even exist..
     }
 }
Esempio n. 2
0
 public static function list_command($nick, $ircdata = array())
 {
     $term = $ircdata[0];
     $limit = $ircdata[1];
     $mode = isset($ircdata[2]) ? strtolower($ircdata[2]) : '';
     if (!core::$nicks[$nick]['ircop'] || services::user_exists($nick, true, array('display', 'identified')) === false) {
         services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED);
         return false;
     }
     // they've gotta be identified and opered..
     if (trim($term) == '' || trim($limit) == '' || isset($mode) && !in_array($mode, array('', 'suspended'))) {
         services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_INVALID_SYNTAX_RE, array('help' => 'INFO'));
         return false;
     }
     // invalid syntax
     if (!preg_match('/([0-9]+)\\-([0-9]+)/i', $limit)) {
         services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_INVALID_SYNTAX_RE, array('help' => 'LIST'));
         return false;
     }
     // invalid syntax
     $total = database::select('chans', array('id'));
     $total = database::num_rows($total);
     $chans = self::_find_match($term, $mode, $limit);
     // try and find a match
     if (database::num_rows($chans) == 0) {
         services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_LIST_BOTTOM, array('num' => 0, 'total' => $total));
         return false;
     }
     // no channels?
     services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_LIST_TOP);
     services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_LIST_TOP2);
     // top of the list
     while ($channel = database::fetch($chans)) {
         $false_chan = $channel->channel;
         if (!isset($channel->channel[18])) {
             $y = strlen($channel->channel);
             for ($i = $y; $i <= 17; $i++) {
                 $false_chan .= ' ';
             }
         }
         // this is just a bit of fancy fancy, so everything displays neat
         if ($channel->suspended == 0) {
             $info = chanserv::get_flags($channel->channel, 'd');
         } else {
             $info = $channel->suspend_reason;
         }
         // suspend reason, or description?
         services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_LIST_ROW, array('chan' => $false_chan, 'info' => $info));
     }
     // loop through the channels
     services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_LIST_BOTTOM, array('num' => database::num_rows($chans) == 0 ? 0 : database::num_rows($chans), 'total' => $total));
 }
Esempio n. 3
0
 public static function list_command($nick, $ircdata = array())
 {
     $term = $ircdata[0];
     $limit = $ircdata[1];
     $mode = isset($ircdata[2]) ? strtolower($ircdata[2]) : '';
     if (!core::$nicks[$nick]['ircop'] || services::user_exists($nick, true, array('display', 'identified')) === false) {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_ACCESS_DENIED);
         return false;
     }
     // they've gotta be identified and opered..
     if (trim($term) == '' || trim($limit) == '' || isset($mode) && !in_array($mode, array('', 'suspended'))) {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INVALID_SYNTAX_RE, array('help' => 'LIST'));
         return false;
     }
     // invalid syntax
     if (!preg_match('/([0-9]+)\\-([0-9]+)/i', $limit)) {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INVALID_SYNTAX_RE, array('help' => 'LIST'));
         return false;
     }
     // invalid syntax
     $total = database::select('users', array('id'));
     $total = database::num_rows($total);
     $nicks = self::_find_match($term, $mode, $limit);
     // try and find a match
     if (database::num_rows($nicks) == 0) {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_LIST_BOTTOM, array('num' => 0, 'total' => $total));
         return false;
     }
     // no nicks?
     services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_LIST_TOP);
     services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_LIST_TOP2);
     // top of list.
     while ($user = database::fetch($nicks)) {
         $false_nick = $user->display;
         if (!isset($user->display[18])) {
             $y = strlen($user->display);
             for ($i = $y; $i <= 17; $i++) {
                 $false_nick .= ' ';
             }
         }
         // this is just a bit of fancy fancy, so everything displays neat
         if ($user->suspended == 0) {
             $hostmask = explode('!', $user->last_hostmask);
             $info = $hostmask[1];
         } else {
             $info = $user->suspend_reason;
         }
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_LIST_ROW, array('nick' => $false_nick, 'info' => $info));
     }
     // loop through the nicks
     services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_LIST_BOTTOM, array('num' => database::num_rows($nicks) == 0 ? 0 : database::num_rows($nicks), 'total' => $total));
 }
Esempio n. 4
0
 public function main(&$ircdata, $startup = false)
 {
     if (ircd::on_msg(&$ircdata, core::$config->operserv->nick)) {
         $nick = core::get_nick(&$ircdata, 0);
         $query = substr(core::get_data_after(&$ircdata, 3), 1);
         // convert to lower case because all the tingy wags are in lowercase
         $query = strtolower($query);
         if (core::$nicks[$nick]['ircop'] && services::user_exists($nick, true, array('display', 'identified') !== false)) {
             operserv::get_help($nick, $query);
         }
     }
     // only hook to the privmsg towards OperServ
 }
Esempio n. 5
0
 public static function register_command($nick, $ircdata = array())
 {
     $chan = core::get_chan(&$ircdata, 0);
     $desc = core::get_data_after(&$ircdata, 1);
     // get the channel.
     if ($user = services::user_exists($nick, true, array('display', 'id'))) {
         if (trim($desc) == '' || $chan == '' || $chan[0] != '#' || stristr($channel, ' ')) {
             services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_INVALID_SYNTAX_RE, array('help' => 'INFO'));
             // wrong syntax
             return false;
         }
         if (services::chan_exists($chan, array('channel')) !== false) {
             services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_REGISTERED_CHAN, array('chan' => $chan));
             return false;
         }
         // check if its registered?
         if (!strstr(core::$chans[$chan]['users'][$nick], 'o')) {
             services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_NEED_CHAN_OP, array('chan' => $chan));
             return false;
         }
         // we need to check if the user trying to register it has +o
         // if not we tell them to GET IT!
         $chan_info = array('channel' => $chan, 'timestamp' => core::$network_time, 'last_timestamp' => core::$network_time, 'topic' => core::$chans[$chan]['topic'], 'topic_setter' => core::$chans[$chan]['topic_setter']);
         $rflags = core::$config->chanserv->default_flags;
         $rflags = str_replace('d', '', $rflags);
         $rflags = str_replace('u', '', $rflags);
         $rflags = str_replace('e', '', $rflags);
         $rflags = str_replace('w', '', $rflags);
         $rflags = str_replace('m', '', $rflags);
         $rflags = str_replace('t', '', $rflags);
         // ignore parameter flags
         database::insert('chans', $chan_info);
         database::insert('chans_levels', array('channel' => $chan, 'target' => $user->display, 'flags' => 'Ftfrsqao'));
         database::insert('chans_flags', array('channel' => $chan, 'flags' => $rflags . 'd', 'desc' => $desc));
         // create the channel! WOOOH
         services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_CHAN_REGISTERED, array('chan' => $chan));
         core::alog(core::$config->chanserv->nick . ': ' . $chan . ' registered by ' . core::get_full_hostname($nick));
         // logchan
         core::alog('register_command(): ' . $chan . ' registered by ' . core::get_full_hostname($nick), 'BASIC');
         // log what we need to log.
         if ($channel = services::chan_exists($chan, array('channel', 'topic', 'suspended'))) {
             chanserv::_join_channel(&$channel);
             // join the channel
         }
         // does the channel exist?
     } else {
         services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_UNREGISTERED);
         return false;
         // ph00s aint even registered..
     }
 }
Esempio n. 6
0
 public static function drop_command($nick, $ircdata = array())
 {
     $unick = core::get_nick(&$ircdata, 0);
     $password = $ircdata[1];
     // get the nick.
     if (trim($unick) == '' || trim($password) == '' && (!core::$nicks[$nick]['ircop'] || services::user_exists($nick, true, array('display', 'identified')) === false)) {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INVALID_SYNTAX_RE, array('help' => 'DROP'));
         return false;
     }
     // invalid syntax
     if (services::is_root($unick) && !services::is_root($nick)) {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_ACCESS_DENIED);
         return false;
     }
     // is a non-root trying to drop a root?
     if ($user = services::user_exists($unick, false, array('id', 'display', 'pass', 'salt', 'suspended'))) {
         if ($user->suspended == 1) {
             services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_SUSPEND_1, array('nick' => $user->display));
             return false;
         }
         // are they suspended?
         if ($user->pass == sha1($password . $user->salt) || core::$nicks[$nick]['ircop'] && services::user_exists($nick, true, array('display', 'identified')) !== false) {
             database::delete('users', array('display', '=', $user->display));
             database::delete('users_flags', array('nickname', '=', $user->display));
             // delete the users record
             database::delete('chans_levels', array('target', '=', $user->display));
             // also delete this users channel access.
             core::alog(core::$config->nickserv->nick . ': ' . $user->display . ' has been dropped by ' . core::get_full_hostname($nick));
             // logchan it
             core::alog('drop_command(): ' . $user->display . ' has been dropped by ' . core::get_full_hostname($nick), 'BASIC');
             // log what we need to log.
             if (isset(core::$nicks[$user->display])) {
                 ircd::on_user_logout($nick->display);
             }
             // if the nick is being used unregister it, even though it shouldn't be?
             services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_NICK_DROPPED, array('nick' => $user->display));
             // let the nick know the account has been dropped.
         } else {
             services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INVALID_PASSWORD);
             // password isn't correct
         }
     } else {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_ISNT_REGISTERED, array('nick' => $unick));
         return false;
         // doesn't even exist..
     }
 }
Esempio n. 7
0
 public static function logout_command($nick, $ircdata = array())
 {
     // no parameter commands ftw.
     if ($user = services::user_exists($nick, false, array('display', 'id', 'identified', 'vhost'))) {
         if ($user->identified == 1) {
             ircd::on_user_logout($nick);
             // here we set unregistered mode
             database::update('users', array('identified' => 0, 'last_timestamp' => core::$network_time), array('display', '=', $nick));
             // unidentify them
             services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_LOGGED_OUT);
             // let them know
             core::alog(core::$config->nickserv->nick . ': ' . core::get_full_hostname($nick) . ' logged out of ' . core::$nicks[$nick]['nick']);
             // and log it.
         } else {
             services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_NOT_IDENTIFIED);
             // not even identified
         }
     } else {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_UNREGISTERED);
         // unregistered nick name
     }
 }
Esempio n. 8
0
 public static function info_command($nick, $ircdata = array())
 {
     $chan = core::get_chan(&$ircdata, 0);
     // get the channel.
     if ($chan == '' || $chan[0] != '#') {
         services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_INVALID_SYNTAX_RE, array('help' => 'INFO'));
         return false;
         // wrong syntax
     }
     // make sure they've entered a channel
     if (!($channel = services::chan_exists($chan, array('channel', 'timestamp', 'last_timestamp', 'suspended', 'suspend_reason')))) {
         services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_UNREGISTERED_CHAN, array('chan' => $chan));
         return false;
     }
     // make sure the channel exists
     if ($channel->suspended == 1) {
         services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_INFO_SUSPENDED_1, array('chan' => $channel->channel));
         services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_INFO_SUSPENDED_2, array('reason' => $channel->suspend_reason));
     } else {
         $founder = database::select('chans_levels', array('id', 'channel', 'target', 'flags'), array('channel', '=', $chan));
         $founders = '';
         while ($f_row = database::fetch($founder)) {
             if (strpos($f_row->flags, 'F') !== false) {
                 $founders .= $f_row->target . ', ';
             }
         }
         // get the founder(s)
         services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_INFO_1, array('chan' => $channel->channel));
         services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_INFO_2, array('nicks' => substr($founders, 0, -2)));
         $desc = chanserv::get_flags($channel->channel, 'd');
         if ($desc != null) {
             services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_INFO_3, array('desc' => $desc));
         }
         // description?
         if (core::$chans[$chan]['topic'] != '') {
             services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_INFO_4, array('topic' => core::$chans[$chan]['topic']));
         }
         // topic
         $email = chanserv::get_flags($channel->channel, 'e');
         if ($email != null) {
             services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_INFO_5, array('email' => $email));
         }
         // is there an email?
         $url = chanserv::get_flags($channel->channel, 'u');
         if ($url != null) {
             services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_INFO_6, array('url' => $url));
         }
         // or a url?
         services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_INFO_7, array('time' => date("F j, Y, g:i a", $channel->timestamp)));
         services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_INFO_8, array('time' => date("F j, Y, g:i a", $channel->last_timestamp)));
         $modelock = chanserv::get_flags($channel->channel, 'm');
         if ($modelock != null) {
             services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_INFO_9, array('mode_lock' => $modelock));
         }
         // is there a mode lock?
         $entrymsg = chanserv::get_flags($channel->channel, 'w');
         if ($entrymsg != null) {
             services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_INFO_10, array('entrymsg' => $entrymsg));
         }
         // is there an entry msg?
         $list = '';
         if (chanserv::check_flags($channel->channel, array('T'))) {
             $list .= 'Topiclock, ';
         }
         if (chanserv::check_flags($channel->channel, array('K'))) {
             $list .= 'Keeptopic, ';
         }
         if (chanserv::check_flags($channel->channel, array('G'))) {
             $list .= 'Guard, ';
         }
         if (chanserv::check_flags($channel->channel, array('S'))) {
             $list .= 'Secure, ';
         }
         if (chanserv::check_flags($channel->channel, array('F'))) {
             $list .= 'Fantasy';
         }
         if (substr($list, -2, 2) == ', ') {
             $list = substr($list, 0, -2);
         }
         // compile our list of options
         if ($list != '') {
             services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_INFO_11, array('options' => $list));
         }
         // if our list doesn't equal '', eg. empty show the info.
         if (core::$nicks[$nick]['ircop'] && services::user_exists($nick, true, array('display', 'identified')) !== false && core::$config->chanserv->expire != 0) {
             $expiry_time = core::$config->chanserv->expire * 86400;
             services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_INFO_12, array('time' => date("F j, Y, g:i a", $channel->last_timestamp + $expiry_time)));
         }
         // if the nick in question has staff powers, we show the expiry times.
     }
 }
Esempio n. 9
0
 public static function get_help($hook, &$nick, &$command)
 {
     // not too sure how to deal with this, probably will
     // let this function do the looping and just send it
     // straight to the client?
     if (services::check_mask_ignore($nick) === true) {
         return false;
     }
     // this is basically to check if we have
     // an ignored user, via their hostmask, or their nickname.
     if ($hook == 'chanserv') {
         $bot = core::$config->chanserv->nick;
     }
     if ($hook == 'nickserv') {
         $bot = core::$config->nickserv->nick;
     }
     if ($hook == 'operserv') {
         $bot = core::$config->operserv->nick;
     }
     // what we sending from?
     $commands = explode(' ', $command);
     if (strtolower($commands[0]) != 'help' || trim($command) == '') {
         return false;
     }
     // is it actually a help command? >.<
     $count = (isset(self::$prefix[$hook][$command]) ? count(self::$prefix[$hook][$command]) : 0) + (isset(self::$helpv[$hook][$command]) ? count(self::$helpv[$hook][$command]) : 0) + (isset(self::$suffix[$hook][$command]) ? count(self::$suffix[$hook][$command]) : 0);
     if (!isset(self::$helpv[$hook][$command]) || $count == 0) {
         services::communicate($bot, $nick, 'No help available for ' . $command . '.');
         return false;
     }
     // does the array even exist?
     if (isset(self::$prefix[$hook][$command])) {
         foreach (self::$prefix[$hook][$command] as $line => $meta_data) {
             $meta = unserialize($meta_data);
             services::communicate($bot, $nick, $meta['info']);
         }
     }
     // is there a prefix?
     foreach (self::$helpv[$hook][$command] as $line => $meta_data) {
         $meta = unserialize($meta_data);
         if ($meta['oper_help'] && (services::user_exists($nick, true, array('display', 'identified')) !== false && core::$nicks[$nick]['ircop'])) {
             services::communicate($bot, $nick, $meta['info']);
         } elseif (!$meta['oper_help']) {
             services::communicate($bot, $nick, $meta['info']);
         }
     }
     // display the main stuff
     if (isset(self::$suffix[$hook][$command])) {
         foreach (self::$suffix[$hook][$command] as $line => $meta_data) {
             $meta = unserialize($meta_data);
             services::communicate($bot, $nick, $meta['info']);
         }
     }
     // is there a suffix?
 }
Esempio n. 10
0
 public static function check_levels($nick, $chan, $flags, $force = true, $ident = true, $return = false, $or_check = true)
 {
     if ($ident && !($user = services::user_exists($nick, true, array('id', 'display')))) {
         return false;
     }
     // they aint even identified..
     $user_flags_q = database::select('chans_levels', array('id', 'channel', 'target', 'flags', 'reason'), array('channel', '=', $chan));
     // get our flags records
     $hostname = core::get_full_hostname($nick);
     // generate a hostname
     while ($chan_flags = database::fetch($user_flags_q)) {
         if ($or_check && core::$nicks[$nick]['override']) {
             return true;
         }
         // is override enabled for this user?
         if ($nick == $chan_flags->target || $force && (strpos($chan_flags->target, '@') !== false && services::match($hostname, $chan_flags->target))) {
             foreach ($flags as $flag) {
                 if (strpos($chan_flags->flags, $flag) !== false) {
                     if ($return) {
                         return $chan_flags->reason;
                     } else {
                         return true;
                     }
                 }
                 // hurrah, we've found a match!
             }
             // loop through the flags, if we find a match, return true
             continue;
         }
         // only trigger if this is the user we are in question of.
     }
     // loop through the flag records
     return false;
 }
Esempio n. 11
0
 public static function vhost_command($nick, $ircdata = array())
 {
     $mode = $ircdata[0];
     if (strtolower($mode) == 'set') {
         $host = $ircdata[2];
         $unick = $ircdata[1];
         // some variables.
         if (trim($unick) == '') {
             services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_INVALID_SYNTAX_RE, array('help' => 'VHOST'));
             return false;
         }
         // are we missing nick? invalid syntax if so.
         if (!($user = services::user_exists($unick, false, array('display', 'id', 'identified', 'vhost')))) {
             services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_ISNT_REGISTERED, array('nick' => $unick));
             return false;
         }
         // is the nick registered?
         if (substr_count($host, '@') == 1) {
             $realhost = $host;
             $new_host = explode('@', $host);
             $ident = $new_host[0];
             $host = $new_host[1];
         } elseif (substr_count($host, '@') > 1) {
             services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_INVALID_HOSTNAME);
             return false;
         } else {
             $realhost = $host;
         }
         // check if there is a @
         if (services::valid_host($host) === false) {
             services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_INVALID_HOSTNAME);
             return false;
         }
         // is the hostname valid?
         database::update('users', array('vhost' => $realhost), array('display', '=', $user->display));
         core::alog(core::$config->operserv->nick . ': vHost for ' . $unick . ' set to ' . $realhost . ' by ' . $nick);
         services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_VHOST_SET, array('nick' => $unick, 'host' => $realhost));
         // update it and log it
         if (isset(core::$nicks[$unick]) && $user->identified == 1) {
             if (substr_count($realhost, '@') == 1) {
                 ircd::setident(core::$config->operserv->nick, $unick, $ident);
                 ircd::sethost(core::$config->operserv->nick, $unick, $host);
             } else {
                 ircd::sethost(core::$config->operserv->nick, $unick, $host);
             }
         }
         // we need to check if the user is online and identified?
     } elseif (strtolower($mode) == 'del') {
         $unick = $ircdata[1];
         // some variables.
         if (trim($unick) == '') {
             services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_INVALID_SYNTAX_RE, array('help' => 'VHOST'));
             return false;
         }
         // are we missing nick? invalid syntax if so.
         if (!($user = services::user_exists($unick, false, array('display', 'id', 'identified', 'vhost')))) {
             services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_ISNT_REGISTERED, array('nick' => $unick));
             return false;
         }
         // is the nick registered?
         if ($user->vhost == '') {
             services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_NO_VHOST, array('nick' => $unick));
             return false;
         }
         // is there a vhost?!
         database::update('users', array('vhost' => ''), array('display', '=', $user->display));
         core::alog(core::$config->operserv->nick . ': vHost for ' . $unick . ' deleted by ' . $nick);
         services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_VHOST_DELETED, array('nick' => $unick));
         // update and logchan
     } elseif (strtolower($mode) == 'list') {
         $limit = $ircdata[1];
         // get limit.
         if (trim($limit) == '') {
             services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_INVALID_SYNTAX_RE, array('help' => 'VHOST'));
             return false;
         }
         // invalid syntax
         if (!preg_match('/([0-9]+)\\-([0-9]+)/i', $limit)) {
             services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_INVALID_SYNTAX_RE, array('help' => 'VHOST'));
             return false;
         }
         // invalid syntax
         $total = database::select('users', array('id'), array('vhost', '!=', ''));
         $total = database::num_rows($total);
         // get the total
         $limit = database::quote($limit);
         $s_limit = explode('-', $limit);
         $offset = $s_limit[0];
         $max = $s_limit[1];
         // split up the limit and stuff ^_^
         $users_q = database::select('users', array('display', 'vhost'), array('vhost', '!=', ''), '', array($offset => $max));
         // get the vhosts
         if (database::num_rows($users_q) == 0) {
             services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_VHOST_LIST_B, array('num' => database::num_rows($users_q), 'total' => $total));
             return false;
         }
         // no vhosts
         services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_VHOST_LIST_T);
         services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_VHOST_LIST_T2);
         // list top.
         while ($users = database::fetch($users_q)) {
             $false_nick = $users->display;
             if (!isset($users->display[18])) {
                 $y = strlen($users->display);
                 for ($i = $y; $i <= 17; $i++) {
                     $false_nick .= ' ';
                 }
             }
             // this is just a bit of fancy fancy, so everything displays neat
             services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_VHOST_LIST_R, array('nick' => $false_nick, 'info' => $users->vhost));
         }
         // loop through em, show the vhosts
         services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_VHOST_LIST_B, array('num' => database::num_rows($users_q) == 0 ? 0 : database::num_rows($users_q), 'total' => $total));
         // end of list.
     } else {
         services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_INVALID_SYNTAX_RE, array('help' => 'VHOST'));
         return false;
         // invalid syntax.
     }
 }
Esempio n. 12
0
 public function main(&$ircdata, $startup = false)
 {
     if (ircd::on_connect(&$ircdata)) {
         $nick = core::get_nick(&$ircdata, core::$config->server->ircd == 'inspircd12' ? 4 : 3);
         if ($user = services::user_exists($nick, false, array('display', 'suspended'))) {
             if ($user->suspended == 1) {
                 $random_nick = 'Unknown' . rand(10000, 99999);
                 services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_SUSPEND_1, array('nick' => $user->display));
                 services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_NICK_CHANGE, array('nick' => $random_nick));
                 ircd::svsnick($nick, $random_nick, core::$network_time);
             }
         }
         // check if the nick is suspended etc.
     }
     // trigger on connect
     if (ircd::on_nick_change(&$ircdata)) {
         $nick = core::get_nick($ircdata, 2);
         // get the nicknames
         if ($user = services::user_exists($nick, false, array('display', 'suspended'))) {
             if ($user->suspended == 1) {
                 $random_nick = 'Unknown' . rand(10000, 99999);
                 services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_SUSPEND_1, array('nick' => $user->display));
                 services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_NICK_CHANGE, array('nick' => $random_nick));
                 ircd::svsnick($nick, $random_nick, core::$network_time);
             }
         }
         // check if the nick is suspended etc.
     }
     // trigger on nick change
 }
Esempio n. 13
0
 public static function confirm_command($nick, $ircdata = array())
 {
     $code = $ircdata[0];
     if (trim($code) == '') {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INVALID_SYNTAX_RE, array('help' => 'CONFIRM'));
         return false;
     }
     // wrong syntax
     if (!($user = services::user_exists($nick, false, array('display', 'id')))) {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_UNREGISTERED);
         return false;
     }
     // unregistered
     $code_array = database::select('validation_codes', array('nick', 'code'), array('nick', '=', $nick, 'AND', 'code', '=', $code));
     if (database::num_rows($code_array) == 0) {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INVALID_PASSCODE);
     } else {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_VALIDATED);
         // let them know.
         database::update('users', array('validated' => 1), array('id', '=', $user->id));
         // user is now validated.
         database::delete('validation_codes', array('nick', '=', $nick, 'AND', 'code', '=', $code));
         // delete the code now that we've validated them
         core::alog(core::$config->nickserv->nick . ': ' . $nick . ' activated');
         // logchan
     }
     // no passcode found
 }
Esempio n. 14
0
 public function main(&$ircdata, $startup = false)
 {
     if (ircd::on_connect(&$ircdata)) {
         $nick = core::get_nick(&$ircdata, core::$config->server->ircd == 'inspircd12' ? 4 : 3);
         // get nick
         if ($user = services::user_exists($nick, false, array('display', 'identified', 'validated', 'last_hostmask', 'suspended'))) {
             if ($user->validated == 0 && $user->suspended == 0) {
                 ircd::on_user_logout($nick);
                 // they shouldn't really have registered mode
                 services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_AWAITING_VALIDATION);
             } elseif ($user->identified == 0 && $user->suspended == 0) {
                 self::_registered_nick($nick, $user);
             } elseif ($user->identified == 1 && $user->last_hostmask == core::get_full_hostname($nick)) {
                 ircd::on_user_login($nick);
                 if (!$startup) {
                     core::alog(core::$config->nickserv->nick . ': ' . core::$nicks[$nick]['ident'] . '@' . core::$nicks[$nick]['host'] . ' automatically identified for ' . $nick);
                 }
             } else {
                 self::_registered_nick($nick, $user);
             }
         }
         // is the user existing?
     }
     // on connect let them know that they're using
     // an identified nickname
     if (ircd::on_nick_change(&$ircdata)) {
         $nick = core::get_nick($ircdata, 2);
         $old_nick = core::$nicks[$nick]['onick'];
         // get the nicknames
         timer::remove(array('ns_identify', 'secured_callback', array($old_nick)));
         // remove the secured timer. if there is one
         ircd::on_user_logout($nick);
         // we remove the registered mode
         if ($user = services::user_exists($nick, false, array('display', 'identified', 'validated', 'last_hostmask', 'suspended'))) {
             if ($user->validated == 0 && $user->suspended == 0) {
                 ircd::on_user_logout($nick);
                 // they shouldn't really have registered mode
                 services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_AWAITING_VALIDATION);
             } elseif ($user->identified == 0 && $user->suspended == 0) {
                 self::_registered_nick($nick, $user);
             } elseif ($user->identified == 1 && $user->last_hostmask == core::get_full_hostname($nick)) {
                 ircd::on_user_login($nick);
                 core::alog(core::$config->nickserv->nick . ': ' . core::$nicks[$nick]['ident'] . '@' . core::$nicks[$nick]['host'] . ' automatically identified for ' . $nick);
             } else {
                 self::_registered_nick($nick, $user);
             }
         }
         // is the new nick registered? let them know
     }
     if (ircd::on_quit(&$ircdata)) {
         $nick = core::get_nick(&$ircdata, 0);
         timer::remove(array('ns_identify', 'secured_callback', array($nick)));
         // remove the secured timer. if there is one
         database::update('users', array('identified' => 0, 'last_timestamp' => core::$network_time), array('display', '=', $nick));
         // change nick to unidentified imo
     }
 }
Esempio n. 15
0
 public static function sapass_command($nick, $ircdata = array())
 {
     $unick = core::get_nick(&$ircdata, 0);
     $new_pass = $ircdata[1];
     $conf_pass = $ircdata[2];
     // new password.
     if (!($user = services::user_exists($unick, false, array('display', 'id', 'identified', 'salt')))) {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_ISNT_REGISTERED, array('nick' => $unick));
         return false;
     }
     // find out if our user is registered
     if (services::is_root($unick) && !services::is_root($nick)) {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_ACCESS_DENIED);
         return false;
     }
     // is a non-root trying to change a root's password?
     if (!core::$nicks[$nick]['ircop'] || services::user_exists($nick, true, array('display', 'identified')) === false) {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_ACCESS_DENIED);
         return false;
     }
     // do we have access to do this?
     if (strtolower($new_pass) == strtolower($unick)) {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_PASSWORD_NICK_U);
         return false;
     }
     // are they using a reasonable password, eg. != their nick, lol.
     if ($new_pass != $conf_pass) {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_PASSWORD_DIFF);
         return false;
     }
     // the passwords are different
     database::update('users', array('pass' => sha1($new_pass . $user->salt)), array('display', '=', $unick));
     // we update the password here, with the users salt.
     services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_NEW_PASSWORD_U, array('nick' => $unick, 'pass' => $new_pass));
     // let them know
     core::alog(core::$config->nickserv->nick . ': ' . core::get_full_hostname($nick) . ' changed the password for ' . $unick);
     // logchan
 }
Esempio n. 16
0
 public static function saflags_command($nick, $ircdata = array())
 {
     $unick = core::get_nick(&$ircdata, 0);
     $flags = $ircdata[1];
     $param = core::get_data_after(&$ircdata, 2);
     $rparams = explode('||', $param);
     // get the channel.
     if (!($user = services::user_exists($unick, false, array('display', 'id', 'identified', 'salt')))) {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_ISNT_REGISTERED, array('nick' => $unick));
         return false;
     }
     // find out if our user is registered
     if (services::is_root($unick) && !services::is_root($nick)) {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_ACCESS_DENIED);
         return false;
     }
     // is a non-root trying to change a root's password?
     if (!core::$nicks[$nick]['ircop'] || services::user_exists($nick, true, array('display', 'identified')) === false) {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_ACCESS_DENIED);
         return false;
     }
     // do we have access to do this?
     $flag_a = array();
     foreach (str_split($flags) as $flag) {
         if (strpos(self::$flags, $flag) === false) {
             services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_FLAGS_UNKNOWN, array('flag' => $flag));
             return false;
         }
         // flag is invalid.
         $flag_a[$flag]++;
         // plus
         if ($flag_a[$flag] > 1 || $flag != '-' && $flag != '+') {
             $flag_a[$flag]--;
         }
         // check for dupes
     }
     // check if the flag is valid
     $flags = '';
     foreach ($flag_a as $flag => $count) {
         $flags .= $flag;
     }
     // reconstruct the flags
     $flag_array = mode::sort_modes($flags, false);
     // sort our flags up
     foreach (str_split(self::$p_flags) as $flag) {
         $param_num = strpos($flag_array['plus'], $flag);
         if ($param_num !== false) {
             $params[$flag] = trim($rparams[$param_num]);
         }
         // we do!
     }
     // check if we have any paramtized flags, eg +me
     foreach (str_split($flag_array['plus']) as $flag) {
         // paramtized flags (lowercase) ones come first
         // ----------- +e ----------- //
         if ($flag == 'e') {
             self::set_flag($nick, $unick, '+e', $params['e']);
             // +e the target in question
         } elseif ($flag == 'u') {
             self::set_flag($nick, $unick, '+u', $params['u']);
             // +u the target in question
         } elseif ($flag == 'S') {
             self::set_flag($nick, $unick, '+S', '');
             // +S the target in question
         } elseif ($flag == 'P') {
             self::set_flag($nick, $unick, '+P', '');
             // +P the target in question
         }
         // ----------- +P ----------- //
     }
     foreach (str_split($flag_array['minus']) as $flag) {
         // paramtized flags (lowercase) ones come first
         // ----------- -e ----------- //
         if ($flag == 'e') {
             self::set_flag($nick, $unick, '-e', $params['e']);
             // -e the target in question
         } elseif ($flag == 'u') {
             self::set_flag($nick, $unick, '-u', $params['u']);
             // -u the target in question
         } elseif ($flag == 'S') {
             self::set_flag($nick, $unick, '-S', '');
             // -S the target in question
         } elseif ($flag == 'P') {
             self::set_flag($nick, $unick, '-P', '');
             // -P the target in question
         }
         // ----------- -P ----------- //
     }
     if (isset(self::$set[$unick])) {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_FLAGS_SET, array('flag' => self::$set[$unick], 'target' => $unick));
         unset(self::$set[$unick]);
     }
     // send back the target stuff..
     if (isset(self::$already_set[$unick])) {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_FLAGS_ALREADY_SET, array('flag' => self::$already_set[$unick], 'target' => $unick));
         unset(self::$already_set[$unick]);
     }
     // send back the target stuff..
     if (isset(self::$not_set[$unick])) {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_FLAGS_NOT_SET, array('flag' => self::$not_set[$unick], 'target' => $unick));
         unset(self::$not_set[$unick]);
     }
     // send back the target stuff..
 }
Esempio n. 17
0
 public function main(&$ircdata, $startup = false)
 {
     foreach (modules::$list as $module => $data) {
         if ($data['type'] == 'operserv') {
             modules::$list[$module]['class']->main(&$ircdata, $startup);
             // loop through the modules for operserv.
         }
     }
     if (ircd::on_msg(&$ircdata, core::$config->operserv->nick)) {
         $nick = core::get_nick(&$ircdata, 0);
         $command = substr(core::get_data_after(&$ircdata, 3), 1);
         // convert to lower case because all the tingy wags are in lowercase
         core::alog(core::$config->operserv->nick . ': ' . $nick . ': ' . $command);
         // logchan it
         if (core::$nicks[$nick]['ircop'] && services::user_exists($nick, true, array('display', 'identified') !== false)) {
             self::get_command($nick, $command);
         } else {
             services::communicate(core::$config->operserv->nick, $nick, &self::$help->OS_DENIED_ACCESS);
         }
         // theyre an oper.
     }
     // this is what we use to handle command listens
     // should be quite epic.
 }
Esempio n. 18
0
 public static function info_command($nick, $ircdata = array())
 {
     $unick = core::get_nick(&$ircdata, 0);
     // get the nickname.
     if ($unick == '') {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INVALID_SYNTAX_RE, array('help' => 'INFO'));
         // wrong syntax
         return false;
     }
     // make sure they've entered a channel
     if (!($user = services::user_exists($unick, false, array('display', 'suspended', 'suspend_reason', 'last_hostmask', 'timestamp', 'last_timestamp')))) {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_ISNT_REGISTERED, array('nick' => $unick));
         return false;
     }
     // make sure the user exists
     if ($user->suspended == 1) {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INFO_SUSPENDED_1, array('nick' => $user->display));
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INFO_SUSPENDED_2, array('reason' => $user->suspend_reason));
     } else {
         $hostmask = explode('!', $user->last_hostmask);
         $hostmask = $hostmask[1];
         // get the hostmask
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INFO_1, array('nick' => $user->display));
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INFO_2, array('time' => date("F j, Y, g:i a", $user->timestamp)));
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INFO_3, array('time' => date("F j, Y, g:i a", $user->last_timestamp != 0 ? $user->last_timestamp : core::$network_time)));
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INFO_4, array('host' => $hostmask));
         // standard messages
         if (core::$nicks[$nick]['ircop'] && services::user_exists($nick, true, array('display', 'identified')) !== false || $unick == $nick && services::user_exists($nick, true, array('display', 'identified')) !== false) {
             services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INFO_5, array('email' => nickserv::get_flags($nick, 'e')));
         }
         // if the person doing /ns info has staff powers we show the email
         // or if someone is doing /ns info on themselves we show it.
         $url = nickserv::get_flags($unick, 'u');
         if ($url != null) {
             services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INFO_6, array('url' => $url));
         }
         // url
         $list = '';
         if (nickserv::check_flags($unick, array('S'))) {
             $list .= 'Secure, ';
         }
         if (nickserv::check_flags($unick, array('P'))) {
             $list .= 'Private Message';
         }
         if (substr($list, -2, 2) == ', ') {
             $list = substr($list, 0, -2);
         }
         // compile our list of options
         if ($list != '') {
             services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INFO_7, array('options' => $list));
         }
         // if our list doesn't equal '', eg. empty show the info.
         if (core::$nicks[$nick]['ircop'] && services::user_exists($nick, true, array('display', 'identified')) !== false && core::$config->nickserv->expire != 0) {
             $expiry_time = core::$config->nickserv->expire * 86400;
             services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INFO_8, array('time' => date("F j, Y, g:i a", $user->last_timestamp != 0 ? $user->last_timestamp : core::$network_time + $expiry_time)));
         }
         // if the nick in question has staff powers, we show the expiry times.
     }
 }
Esempio n. 19
0
 public static function _drop_check($nick, $chan)
 {
     if ($chan == '' || $chan[0] != '#') {
         services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_INVALID_SYNTAX_RE, array('help' => 'DROP'));
         return false;
         // wrong syntax
     }
     // make sure they've entered a channel
     if (services::chan_exists($chan, array('channel')) === false) {
         services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_UNREGISTERED_CHAN, array('chan' => $chan));
         return false;
     }
     // make sure the channel exists.
     if (chanserv::_is_founder($nick, $chan)) {
         return true;
     } elseif (core::$nicks[$nick]['ircop'] && services::user_exists($nick, true, array('display', 'identified'))) {
         ircd::globops(core::$config->chanserv->nick, $nick . ' used DROP on ' . $chan);
         return true;
     }
     services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED);
     return false;
     // do they have access?
 }
Esempio n. 20
0
 public static function give_access($chan, $nick, $chan_access, $secure = 1)
 {
     if ($secure && services::user_exists($nick, true, array('display', 'identified')) === false) {
         return false;
     }
     // return false if secure is set to 1 and $nick isnt identified.
     $mode_string = '';
     $mode_params = '';
     foreach ($chan_access as $level) {
         if ($level == '5' && ircd::$owner) {
             $mode_string .= 'q';
             $mode_params .= $nick . ' ';
         }
         // we've found a +q!
         if ($level == '4' && ircd::$protect) {
             $mode_string .= 'a';
             $mode_params .= $nick . ' ';
         }
         // we've found a +a!
         if ($level == '3') {
             $mode_string .= 'o';
             $mode_params .= $nick . ' ';
         }
         // we've found a +o!
         if ($level == '2' && ircd::$halfop) {
             $mode_string .= 'h';
             $mode_params .= $nick . ' ';
         }
         // we've found a +h!
         if ($level == '1') {
             $mode_string .= 'v';
             $mode_params .= $nick . ' ';
         }
         // we've found a +v!
     }
     // loop through access records
     // levels are as follows;
     // 5 - q
     // 4 - a
     // 3 - o
     // 2 - h
     // 1 - v
     if ($mode_string != '') {
         ircd::mode(core::$config->chanserv->nick, $chan, '+' . $mode_string . ' ' . trim($mode_params));
     }
     // finally, we set the mode string on the nick
     // providing it isnt empty
     unset($mode_string);
 }
Esempio n. 21
0
 public static function release_command($nick, $ircdata = array())
 {
     $unick = $ircdata[0];
     $password = $ircdata[1];
     // get the parameters.
     if (trim($unick) == '' || trim($password) == '') {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INVALID_SYNTAX_RE, array('help' => 'RELEASE'));
         return false;
     }
     // invalid syntax
     if ($user = services::user_exists($unick, false, array('display', 'pass', 'salt'))) {
         if ($user->pass == sha1($password . $user->salt) || core::$nicks[$nick]['ircop'] && services::user_exists($nick, true, array('display', 'identified')) !== false) {
             if (!isset(self::$held_nicks[$unick])) {
                 services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_NO_HOLD, array('nick' => $unick));
                 return false;
                 // nickname isnt locked.
             }
             ircd::remove_client($unick, 'RELEASED by ' . $nick);
             core::alog(core::$config->nickserv->nick . ': RELEASE command on ' . $unick . ' used by ' . core::get_full_hostname($nick));
             timer::remove(array('ns_recover', 'remove_callback', array($unick)));
             // if they are, remove client, respectively
             // unsetting data and removing them.
             services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_NICK_RELEASED, array('nick' => $unick));
             // tell the user their nick has been released (Y)
         } else {
             services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_INVALID_PASSWORD);
             // password isn't correct
         }
     } else {
         services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_ISNT_REGISTERED, array('nick' => $unick));
         return false;
         // doesn't even exist..
     }
 }
Esempio n. 22
0
 public static function unsuspend_command($nick, $ircdata = array())
 {
     $chan = core::get_chan(&$ircdata, 0);
     // get the channel.
     if (!core::$nicks[$nick]['ircop'] || services::user_exists($nick, true, array('display', 'identified')) === false) {
         services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED);
         return false;
     }
     // they've gotta be identified.
     if ($chan == '' || $chan[0] != '#') {
         services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_INVALID_SYNTAX_RE, array('help' => 'UNSUSPEND'));
         return false;
         // wrong syntax
     }
     // make sure they've entered a channel
     if ($channel = services::chan_exists($chan, array('channel', 'suspended'))) {
         if ($channel->suspended == 0) {
             services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_SUSPEND_4, array('chan' => $chan));
             return false;
         }
         // channel isn't even suspended
         $check_row = database::select('chans_levels', array('channel'), array('channel', '=', $chan));
         if (database::num_rows($check_row) == 0) {
             database::delete('chans', array('channel', '=', $chan));
             database::delete('chans_flags', array('channel', '=', $chan));
         }
         // the channel has no access records, drop it.
     } else {
         services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_SUSPEND_4, array('chan' => $chan));
         return false;
     }
     services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_SUSPEND_5, array('chan' => $chan));
     core::alog(core::$config->chanserv->nick . ': ' . $nick . ' UNSUSPENDED ' . $chan);
     ircd::globops(core::$config->chanserv->nick, $nick . ' UNSUSPENDED ' . $chan);
     // oh well, was fun while it lasted eh?
     // unsuspend it :P
 }