public static function logonnews_command($nick, $ircdata = array()) { if (strtolower($ircdata[0]) == 'add') { $title = $ircdata[1]; $text = core::get_data_after(&$ircdata, 2); if (trim($title) == '' || trim($text) == '') { services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_INVALID_SYNTAX_RE, array('help' => 'LOGONEWS')); // wrong syntax return false; } self::_add_news($nick, $title, $text); // add a news article } elseif (strtolower($ircdata[0]) == 'del') { $title = $ircdata[1]; if (trim($title) == '') { services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_INVALID_SYNTAX_RE, array('help' => 'LOGONEWS')); // wrong syntax return false; } self::_del_news($nick, $title); // delete a news article, FROM the title. } elseif (strtolower($ircdata[0]) == 'list') { self::_list_news($nick); // list the news } else { services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_INVALID_SYNTAX_RE, array('help' => 'LOGONEWS')); // wrong syntax return false; } }
public static function global_command($nick, $ircdata = array()) { $mask = $ircdata[0]; $message = core::get_data_after(&$ircdata, 1); if (trim($mask) == '' || trim($message) == '') { services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_INVALID_SYNTAX); return false; } // are they sending a message? if (strpos($mask, '@') === false) { services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_GLOBAL_INVALID); return false; } else { if (strpos($mask, '!') === false) { $mask = '*!' . $mask; } // prepend the *! to the mask } // is the mask valid? if (core::$config->global->nick_on_global) { ircd::global_notice(core::$config->global->nick, $mask, '[' . $nick . '] ' . $message); } else { ircd::global_notice(core::$config->global->nick, $mask, $message); } // send the message!! ircd::globops(core::$config->operserv->nick, $nick . ' just used GLOBAL command.'); // we globop the command being used. }
public function main(&$ircdata, $startup = false) { foreach (modules::$list as $module => $data) { if ($data['type'] == 'nickserv') { modules::$list[$module]['class']->main(&$ircdata, $startup); // loop through the modules for nickserv. } } if (ircd::on_msg(&$ircdata, core::$config->nickserv->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 self::get_command($nick, $command); } // this is what we use to handle command listens // should be quite epic. if (ircd::on_mode(&$ircdata) && core::$config->server->help_chan) { $chan = core::get_chan(&$ircdata, 2); if ($chan == strtolower(core::$config->server->help_chan)) { $re_data = $ircdata; unset($re_data[0], $re_data[1], $re_data[2], $re_data[3]); foreach ($re_data as $nick) { // we're going to guess that it's a nick here, lol. if (strstr(core::$chans[$chan]['users'][$nick], 'o')) { ircd::umode(core::$config->nickserv->nick, $nick, '+h'); } // user has +o, lets give em +h! } } // only deal with it if we're talking about the help chan } // here we deal with giving umode +h to ops :D if (ircd::on_chan_create(&$ircdata) && core::$config->server->help_chan) { $chans = explode(',', $ircdata[2]); // chans foreach ($chans as $chan) { if ($chan == strtolower(core::$config->server->help_chan)) { // the chan $nusers_str = implode(' ', $ircdata); $nusers_str = explode(':', $nusers_str); // right here we need to find out where the thing is $nusers = ircd::parse_users($chan, $nusers_str, 1); foreach ($nusers as $nick => $modes) { if (strstr($modes, 'o')) { ircd::umode(core::$config->nickserv->nick, $nick, '+h'); } // user has +o, lets give em +h! } } // only deal with it if we're talking about the help chan } } // and on_chan_create }
public function main(&$ircdata, $startup = false) { if (ircd::on_msg(&$ircdata, core::$config->nickserv->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); nickserv::get_help($nick, $query); } // only hook to the privmsg towards ChanServ, not channel messages // although chanserv shouldn't even be in any channels :P }
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 }
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.. } }
public static function suspend_command($nick, $ircdata = array()) { $chan = core::get_chan(&$ircdata, 0); $reason = core::get_data_after(&$ircdata, 1); $chan_info = array(); // 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 and opered.. if ($chan == '' || $chan[0] != '#') { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_INVALID_SYNTAX_RE, array('help' => 'SUSPEND')); return false; // wrong syntax } // make sure they've entered a channel if (trim($reason) == '') { $reason = 'No reason'; } // is there a reason? if not we set it to 'No Reason' if ($channel = services::chan_exists($chan, array('channel', 'suspended'))) { if ($channel->suspended == 1) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_SUSPEND_2, array('chan' => $chan)); return false; // channel is already suspended lol } else { database::update('chans', array('suspended' => 1, 'suspend_reason' => $reason), array('channel', '=', $channel->channel)); // channel isn't suspended, but it IS registered } } else { $chan_info = array('channel' => $chan, 'timestamp' => core::$network_time, 'last_timestamp' => core::$network_time, 'suspended' => 1, 'suspend_reason' => $reason); database::insert('chans', $chan_info); database::insert('chans_flags', array('channel' => $chan, 'flags' => 'd', 'desc' => $reason)); // if the channel isn't registered, we register it, with a founder value of 0 // so we can check when it's unsuspended THAT if the founder value is 0, we'll // just drop it as well, this way nobody actually gets the founder status. } services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_SUSPEND_3, array('chan' => $chan, 'reason' => $reason)); core::alog(core::$config->chanserv->nick . ': ' . $nick . ' SUSPENDED ' . $chan . ' with the reason: ' . $reason); ircd::globops(core::$config->chanserv->nick, $nick . ' SUSPENDED ' . $chan); if (!empty(core::$chans[$chan]['users'])) { foreach (core::$chans[$chan]['users'] as $user => $boolean) { if (!core::$nicks[$nick]['ircop']) { ircd::kick(core::$config->chanserv->nick, $user, $chan, $reason); } } } // any users in the channel? KICK EM!! RAWR }
public static function suspend_command($nick, $ircdata = array()) { $unick = core::get_nick(&$ircdata, 0); $reason = core::get_data_after(&$ircdata, 1); $user_info = array(); // get the nick etc. 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 (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 (trim($reason) == '') { $reason = 'No reason'; } // is there a reason? if not we set it to 'No Reason' if ($user = services::user_exists($unick, false, array('display', 'suspended'))) { if ($user->suspended == 1) { services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_SUSPEND_2, array('nick' => $unick)); return false; // channel is already suspended lol } else { database::update('users', array('suspended' => 1, 'suspend_reason' => $reason), array('display', '=', $user->display)); // channel isn't suspended, but it IS registered } } else { $user_info = array('display' => $unick, 'last_timestamp' => core::$network_time, 'timestamp' => core::$network_time, 'identified' => 0, 'real_user' => 0, 'suspended' => 1, 'suspend_reason' => $reason); // setup the user info array. database::insert('users', $user_info); // insert it into the database. } services::communicate(core::$config->nickserv->nick, $nick, &nickserv::$help->NS_SUSPEND_3, array('nick' => $unick, 'reason' => $reason)); core::alog(core::$config->nickserv->nick . ': ' . $nick . ' SUSPENDED ' . $unick . ' with the reason: ' . $reason); ircd::globops(core::$config->nickserv->nick, $nick . ' SUSPENDED ' . $unick); if (isset(core::$nicks[$unick])) { $random_nick = 'Unknown' . rand(10000, 99999); services::communicate(core::$config->nickserv->nick, $unick, &nickserv::$help->NS_SUSPEND_1, array('nick' => $unick)); services::communicate(core::$config->nickserv->nick, $unick, &nickserv::$help->NS_NICK_CHANGE, array('nick' => $random_nick)); ircd::svsnick($unick, $random_nick, core::$network_time); } // is the nick in use? we need to force change it. }
public static function topic_command($nick, $ircdata = array()) { $chan = core::get_chan(&$ircdata, 0); $topic = core::get_data_after(&$ircdata, 1); // get the channel. if ($chan == '' || $chan[0] != '#') { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_INVALID_SYNTAX_RE, array('help' => 'TOPIC')); 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::check_levels($nick, $channel->channel, array('t', 'F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access? if ($channel = services::chan_exists($chan, array('channel'))) { $topicmask = chanserv::get_flags($chan, 't'); // get the topicmask if ($topicmask != null) { $topic = str_replace(' *', ' ' . $new_topic, $topicmask); $topic = str_replace('\\*', '*', $topic); ircd::topic(core::$config->chanserv->nick, $channel->channel, $topic); database::update('chans', array('topic' => $topic, 'topic_setter' => core::$config->chanserv->nick), array('channel', '=', $channel->channel)); } else { $topic = trim($topic); if (trim($topic) == '') { ircd::topic(core::$config->chanserv->nick, $chan, ''); database::update('chans', array('topic' => '', 'topic_setter' => core::$config->chanserv->nick), array('channel', '=', $chan)); // set us an empty topic } else { ircd::topic(core::$config->chanserv->nick, $chan, $topic); database::update('chans', array('topic' => $topic, 'topic_setter' => core::$config->chanserv->nick), array('channel', '=', $chan)); // change the topic } } } // we gotta get the topicmask etc }
public static function chanclear_command($nick, $ircdata = array()) { $chan = core::get_chan(&$ircdata, 1); $reason = core::get_data_after(&$ircdata, 2); $mode = strtoupper($ircdata[0]); // get the data. if (trim($chan) == '' || trim($reason) == '' || !in_array($mode, array('KICK', 'KILL', 'GLINE'))) { services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_INVALID_SYNTAX_RE, array('help' => 'CHANCLEAR')); return false; // wrong syntax } if ($chan[0] != '#') { services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_INVALID_SYNTAX_RE, array('help' => 'CHANCLEAR')); return false; // wrong syntax } if (isset(core::$chans[$chan])) { foreach (core::$chans[$chan]['users'] as $user => $umode) { if (core::$nicks[$user]['ircop']) { core::alog(core::$config->operserv->nick . ': Ignoring IRC Operator (' . $user . ')'); // ignore irc operator, infact, logchan it too } else { if ($mode == 'KICK') { ircd::kick(core::$config->operserv->nick, $user, $chan, 'CHANKILL by ' . $nick . ' (' . $reason . ')'); ircd::mode(core::$config->operserv->nick, $chan, '+b *@' . core::$nicks[$user]['host']); // kick and +b them } elseif ($mode == 'KILL') { ircd::kill(core::$config->operserv->nick, $user, 'CHANKILL by ' . $nick . ' (' . $reason . ')'); } elseif ($mode == 'GLINE') { ircd::gline(core::$config->operserv->nick, '*@' . core::$nicks[$user]['oldhost'], 604800, 'CHANKILL by ' . $nick . ' (' . $reason . ')'); } // remove all other users. } } // loop through the people in the channel/ } else { services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_CHAN_INVALID, array('chan' => $chan)); } // check if the channel is in use.. }
public static function on_mode(&$ircdata) { if (isset($ircdata[1]) && $ircdata[1] == 'MODE') { core::alog('on_mode(): ' . $ircdata[0] . ' set ' . core::get_data_after($ircdata, 4) . ' on ' . $ircdata[2], 'BASIC'); // i added this to make debbuing a bit more useful. return true; } // return true when any channel has a mode change, because $chan isnt set. return false; }
public static function parse_users($chan, &$ircdata, $number) { $users = core::get_data_after(&$ircdata, $number); $users = explode(' ', $users); foreach ($users as $user) { if ($user != null || $user != ' ') { $nick = explode(',', $user); $mode = trim($nick[0]); $nick = isset($nick[1]) ? trim($nick[1]) : ''; $mode = str_replace(self::$prefix_modes['q'], 'q', $mode); $mode = str_replace(self::$prefix_modes['a'], 'a', $mode); $mode = str_replace(self::$prefix_modes['o'], 'o', $mode); $mode = str_replace(self::$prefix_modes['h'], 'h', $mode); $mode = str_replace(self::$prefix_modes['v'], 'v', $mode); // f*****g shitty inspircd 1.1 if ($nick != '') { $nusers[$nick] = $mode; } } } return $nusers; }
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. }
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.. }
public static function parse_users($chan, &$ircdata, $number) { $users = core::get_data_after(&$ircdata, $number); $users = explode(' ', $users); foreach ($users as $user) { if ($user != null || $user != ' ') { $prenick = explode(',', $user); $nick = trim(self::get_nick($prenick, 1)); if ($nick != null) { $nusers[$nick] = $prenick[0]; } } } return $nusers; }
public function main(&$ircdata, $startup = false) { if (ircd::on_mode(&$ircdata)) { $nick = core::get_nick(&$ircdata, 0); $chan = core::get_chan(&$ircdata, 2); $mode_queue = core::get_data_after(&$ircdata, 4); if (strpos($nick, '.') !== false && core::$config->server->ircd != 'inspircd12') { $server = $nick; } elseif (strlen($nick) == 3 && core::$config->server->ircd == 'inspircd12') { $server = core::$servers[$nick]['sid']; } else { $server = ''; } // we've found a.in nick, which means it's a server? And it's NOT insp1.2 // OR we've noticed $nick is 3 chars long, which is a SID and it's insp1.2 if ($server == core::$config->ulined_servers || is_array(core::$config->ulined_servers) && in_array($server, core::$config->ulined_servers)) { return false; } // ignore mode changing from ulined servers. if (!($channel = services::chan_exists($chan, array('channel')))) { return false; } // channel isnt registered $modelock = chanserv::get_flags($chan, 'm'); // get the modelock if ($modelock != null) { $nmodelock = explode(' ', $modelock); foreach (str_split($nmodelock[0]) as $mode) { if (strstr($mode_queue, $mode)) { ircd::mode(core::$config->chanserv->nick, $chan, $modelock); } // reset the modes } } // modelock? } // we need to check for any modechanges here, for modelocking if (ircd::on_part(&$ircdata)) { $chan = core::get_chan(&$ircdata, 2); // get the channel if (chanserv::check_flags($chan, array('L'))) { timer::add(array('cs_flags', 'increase_limit', array($chan)), 10, 1); // add a timer to update the limit, in 15 seconds } // is there auto-limit enabled? } // on part we check for if (ircd::on_quit(&$ircdata)) { foreach (core::$chans as $chan => $data) { if (chanserv::check_flags($chan, array('L'))) { timer::add(array('cs_flags', 'increase_limit', array($chan)), 10, 1); // add a timer to update the limit, in 15 seconds } // is there auto-limit enabled? } } // on part we check for if (ircd::on_join(&$ircdata)) { $nick = core::get_nick(&$ircdata, 0); $chans = explode(',', $ircdata[2]); // find the nick & chan foreach ($chans as $chan) { if (!($channel = services::chan_exists($chan, array('channel')))) { return false; } // channel isnt registered if (chanserv::check_flags($chan, array('I'))) { if (chanserv::check_levels($nick, $chan, array('k', 'q', 'a', 'o', 'h', 'v', 'F'), true, false) === false) { ircd::mode(core::$config->chanserv->nick, $chan, '+b *@' . core::$nicks[$nick]['host']); ircd::kick(core::$config->chanserv->nick, $nick, $chan, '+k only channel.'); return false; } // they don't have +k, KICKEM } // is the channel +I, eg, +k users only? $welcome = chanserv::get_flags($chan, 'w'); // get the welcome msg if ($welcome != null) { ircd::notice(core::$config->chanserv->nick, $nick, '(' . $chan . ') ' . $welcome); // we give them the welcome msg } // is there any welcome msg? notice it to them if (chanserv::check_flags($chan, array('L'))) { timer::add(array('cs_flags', 'increase_limit', array($chan)), 10, 1); // add a timer to update the limit, in 15 seconds } // is there auto-limit enabled? } } // on_join entry msg // this is just a basic JOIN trigger if (ircd::on_chan_create(&$ircdata)) { $chans = explode(',', $ircdata[2]); // chan foreach ($chans as $chan) { $nusers_str = implode(' ', $ircdata); $nusers_str = explode(':', $nusers_str); // right here we need to find out where the thing is $nusers = ircd::parse_users($chan, $nusers_str, 1); if (!($channel = services::chan_exists($chan, array('channel')))) { return false; } // channel isnt registered if (chanserv::check_flags($chan, array('I'))) { foreach ($nusers as $nick => $mode) { if (chanserv::check_levels($nick, $chan, array('k', 'q', 'a', 'o', 'h', 'v', 'F'), true, false) === false) { ircd::mode(core::$config->chanserv->nick, $chan, '+b *@' . core::$nicks[$nick]['host']); ircd::kick(core::$config->chanserv->nick, $nick, $chan, '+k only channel.'); } // they don't have +k, KICKEM } } // is the channel +I, eg, +k users only? $welcome = chanserv::get_flags($chan, 'w'); // get the welcome msg if ($welcome != null) { foreach ($nusers as $nick => $mode) { if ($nick == core::$config->chanserv->nick) { continue; } // skip if it's chanserv ircd::notice(core::$config->chanserv->nick, $nick, '(' . $chan . ') ' . $welcome); // we give them the entrymsg } } // check for a welcome msg, if so // message it to the joining users. if (chanserv::check_flags($chan, array('L'))) { cs_flags::increase_limit($chan, 1); // add a timer to update the limit, in 15 seconds } // is there auto-limit enabled? } } // on channel create, we send out the welcome message // if there is one. }
public static function on_mode(&$ircdata) { if (ircd::on_mode(&$ircdata)) { $nick = core::get_nick(&$ircdata, 0); $chan = core::get_chan(&$ircdata, 2); $mode_queue = core::get_data_after(&$ircdata, 4); $a_mode = strpos($mode_queue, 'a'); $o_mode = strpos($mode_queue, 'o'); $cs_uid = array_search(core::$config->chanserv->nick, core::$uids); // bleh. if ((strpos($mode_queue, core::$config->chanserv->nick) || strpos($mode_queue, $cs_uid)) && ($a_mode !== false || $o_mode !== false)) { if (ircd::$protect) { ircd::mode(core::$config->chanserv->nick, $chan, '+ao ' . core::$config->chanserv->nick . ' ' . core::$config->chanserv->nick); } else { ircd::mode(core::$config->chanserv->nick, $chan, '+o ' . core::$config->chanserv->nick); } // +o its self. } // we're being deopped! WHAT THE F**K! :D } }
public static function levels_command($nick, $ircdata = array(), $announce = false) { $chan = core::get_chan(&$ircdata, 0); $target = $ircdata[2]; $flags = $ircdata[1]; // get the channel. if ($target == '' && $flags == '' && chanserv::check_levels($nick, $chan, array('v', 'h', 'o', 'a', 'q', 'r', 'f', 'F'))) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_LEVELS_LIST_TOP, array('chan' => $chan)); // start of flag list $flags_q = database::select('chans_levels', array('id', 'channel', 'target', 'flags', 'reason'), array('channel', '=', $chan)); // get the flag records $x = 0; while ($flags = database::fetch($flags_q)) { $x++; $false_flag = $flags->flags; if (!isset($flags->flags[13])) { $y = strlen($flags->flags); for ($i = $y; $i <= 12; $i++) { $false_flag .= ' '; } } // this is just a bit of fancy fancy, so everything displays neat, like so: // +ao N0valyfe // +v tool if ($flags->reason != '') { $extra = '(' . $flags->reason . ')'; } else { $extra = ''; } services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_LEVELS_LIST, array('num' => $x, 'target' => $flags->target, 'flags' => '+' . $false_flag, 'reason' => $extra)); // show the flag } // loop through them return false; } // no params // lets show the current flags. if ($target == '' || $flags == '') { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_INVALID_SYNTAX_RE, array('help' => 'LEVELS')); return false; } // missing params? 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. $flag_a = array(); foreach (str_split($flags) as $pos => $flag) { if (strpos(self::$flags, $flag) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_LEVELS_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 if (strpos($target, '@') === false) { if (!($user = services::user_exists($target, false, array('id', 'display')))) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_UNREGISTERED_NICK, array('nick' => $target)); return false; } // they aint even identified.. // were dealing with a nickname, check if it is registered // if not, back out } else { if (strpos($target, '!') === false) { $target = '*!' . $target; } // we're dealing with a mask, check if it a proper mask // *!*@* < like so. } $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($flag_array['plus']) as $flag) { // ----------- +k ----------- // if ($flag == 'k') { if (chanserv::check_levels($nick, $chan, array('h', 'o', 'a', 'q', 'f', 'F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? self::set_flag($nick, $chan, $target, '+k'); // +k the target in question } elseif ($flag == 'v') { if (chanserv::check_levels($nick, $chan, array('h', 'o', 'a', 'q', 'f', 'F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? self::set_flag($nick, $chan, $target, '+v'); // +v the target in question } elseif ($flag == 'h' && ircd::$halfop) { if (chanserv::check_levels($nick, $chan, array('o', 'a', 'q', 'f', 'F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? self::set_flag($nick, $chan, $target, '+h'); // +h the target in question } elseif ($flag == 'o') { if (chanserv::check_levels($nick, $chan, array('a', 'q', 'f', 'F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? self::set_flag($nick, $chan, $target, '+o'); // +o the target in question } elseif ($flag == 'a' && ircd::$protect) { if (chanserv::check_levels($nick, $chan, array('q', 'f', 'F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? self::set_flag($nick, $chan, $target, '+a'); // +a the target in question } elseif ($flag == 'q' && ircd::$owner) { if (chanserv::check_levels($nick, $chan, array('f', 'F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? self::set_flag($nick, $chan, $target, '+q'); // +q the target in question } elseif ($flag == 's') { if (chanserv::check_levels($nick, $chan, array('F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? self::set_flag($nick, $chan, $target, '+s'); // +s the target in question } elseif ($flag == 'r') { if (chanserv::check_levels($nick, $chan, array('F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? self::set_flag($nick, $chan, $target, '+r'); // +r the target in question } elseif ($flag == 'r') { if (chanserv::check_levels($nick, $chan, array('F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? self::set_flag($nick, $chan, $target, '+r'); // +r the target in question } elseif ($flag == 'f') { if (chanserv::check_levels($nick, $chan, array('F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? self::set_flag($nick, $chan, $target, '+f'); // +f the target in question } elseif ($flag == 't') { if (chanserv::check_levels($nick, $chan, array('F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? self::set_flag($nick, $chan, $target, '+t'); // +t the target in question } elseif ($flag == 'F') { if (chanserv::check_levels($nick, $chan, array('F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? self::set_flag($nick, $chan, $target, '+F'); // +F the target in question } elseif ($flag == 'b') { $reason = core::get_data_after(&$ircdata, 3); $reason = $reason == '' ? 'No reason' : $reason; // grab the reason if (chanserv::check_levels($nick, $chan, array('r', 'F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? if (self::set_flag($nick, $chan, $target, '+b', $reason) !== false) { foreach (core::$chans[$chan]['users'] as $user => $modes) { $hostname = core::get_full_hostname($nick); if (strpos($mask, '@') && services::match($hostname, $target) || $user == $target) { if (chanserv::check_levels($nick, $channel->channel, array('v', 'h', 'o', 'a', 'q', 'F'))) { continue; } // don't trigger if they are on the old access list. ircd::mode(core::$config->chanserv->nick, $chan, '+b *@' . core::$nicks[$user]['host']); ircd::kick(core::$config->chanserv->nick, $user, $chan, $reason); // kickban them, but don't stop looping, because there could be more than one match. } // check for a match } // loop through the users in this channel, finding // matches to the +b flag thats just been set } // +b the target in question } // ----------- +b ----------- // } // loop though our plus flags foreach (str_split($flag_array['minus']) as $flag) { // ----------- -k ----------- // if ($flag == 'k') { if (chanserv::check_levels($nick, $chan, array('h', 'o', 'a', 'q', 'f', 'F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? self::set_flag($nick, $chan, $target, '-k'); // -k the target in question } elseif ($flag == 'v') { if (chanserv::check_levels($nick, $chan, array('h', 'o', 'a', 'q', 'f', 'F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? self::set_flag($nick, $chan, $target, '-v'); // -v the target in question } elseif ($flag == 'h' && ircd::$halfop) { if (chanserv::check_levels($nick, $chan, array('o', 'a', 'q', 'f', 'F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? self::set_flag($nick, $chan, $target, '-h'); // -h the target in question } elseif ($flag == 'o') { if (chanserv::check_levels($nick, $chan, array('a', 'q', 'f', 'F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? self::set_flag($nick, $chan, $target, '-o'); // -o the target in question } elseif ($flag == 'a' && ircd::$protect) { if (chanserv::check_levels($nick, $chan, array('q', 'f', 'F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? self::set_flag($nick, $chan, $target, '-a'); // -a the target in question } elseif ($flag == 'q' && ircd::$owner) { if (chanserv::check_levels($nick, $chan, array('f', 'F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? self::set_flag($nick, $chan, $target, '-q'); // -q the target in question } elseif ($flag == 's') { if (chanserv::check_levels($nick, $chan, array('F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? self::set_flag($nick, $chan, $target, '-s'); // -s the target in question } elseif ($flag == 'r') { if (chanserv::check_levels($nick, $chan, array('F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? self::set_flag($nick, $chan, $target, '-r'); // -r the target in question } elseif ($flag == 'r') { if (chanserv::check_levels($nick, $chan, array('F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? self::set_flag($nick, $chan, $target, '-r'); // -r the target in question } elseif ($flag == 'f') { if (chanserv::check_levels($nick, $chan, array('F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? self::set_flag($nick, $chan, $target, '-f'); // -f the target in question } elseif ($flag == 't') { if (chanserv::check_levels($nick, $chan, array('F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? self::set_flag($nick, $chan, $target, '-t'); // -t the target in question } elseif ($flag == 'F') { if (chanserv::check_levels($nick, $chan, array('F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? self::set_flag($nick, $chan, $target, '-F'); // -F the target in question } elseif ($flag == 'b') { if (chanserv::check_levels($nick, $chan, array('r', 'F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access to alter this? if (self::set_flag($nick, $chan, $target, '-b') !== false) { if (strpos($target, '@') === false && ($user = core::search_nick($target))) { ircd::mode(core::$config->chanserv->nick, $chan, '-b *@' . $user['host']); } else { ircd::mode(core::$config->chanserv->nick, $chan, '-b ' . $target); } // is the hostname in our cache? if not unban it.. } // -b the target in question } // ----------- -b ----------- // } // loop through the minus flags if (isset(self::$set[$target])) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_LEVELS_SET, array('target' => $target, 'flag' => self::$set[$target], 'chan' => $chan)); // who do we notice? unset(self::$set[$target]); } // send back the target stuff.. if (isset(self::$already_set[$target])) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_LEVELS_ALREADY_SET, array('target' => $target, 'flag' => self::$already_set[$target], 'chan' => $chan)); unset(self::$already_set[$target]); } // send back the target stuff.. if (isset(self::$not_set[$target])) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_LEVELS_NOT_SET, array('target' => $target, 'flag' => self::$not_set[$target], 'chan' => $chan)); unset(self::$not_set[$target]); } // send back the target stuff.. }
public static function kickban_command($nick, $ircdata = array()) { $chan = $ircdata[0]; $who = $ircdata[1]; // standard data here. if (self::check_channel($nick, $chan, 'KICKBAN') === false) { return false; } // check if the channel exists and stuff if (chanserv::check_levels($nick, $chan, array('r', 'F')) === false) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_ACCESS_DENIED); return false; } // do they have access? if (chanserv::check_levels($nick, $chan, array('o', 'F')) && chanserv::check_levels($nick, $chan, array('o', 'F')) === false) { return false; } // check if the user kicking, has the access to kick them. that doesn't make sense, but yeah. $reason = core::get_data_after(&$ircdata, 2); if ($user = core::search_nick($ircdata[1])) { ircd::mode(core::$config->chanserv->nick, $chan, '+b *@' . $user['host']); ircd::kick(core::$config->chanserv->nick, $who, $chan, '(' . $nick . ') ' . ($reason != '') ? $reason : 'No reason'); // kick them with the reason } else { return false; } // we check if the user exists. }
public static function kick_command($nick, $ircdata = array()) { $unick = $ircdata[0]; $channel = core::get_chan(&$ircdata, 1); $reason = core::get_data_after(&$ircdata, 2); // grab the parameters: nick; channel; reason (optional) if (trim($unick) == '' || trim($channel) == '') { services::communicate(core::$config->operserv->nick, $nick, &operserv::$help->OS_INVALID_SYNTAX_RE, array('help' => 'KICK')); return false; } // are we missing nick and channel? invalid syntax if so. $ntemplate = $template; if (trim($reason) == '') { $reason = 'Kick command issued by ' . $nick; } // if they haven't suplied a reason let's fill it in. if (isset(core::$nicks[$unick]) && isset(core::$chans[$channel]) && isset(core::$chans[$channel]['users'][$unick])) { ircd::kick(core::$config->operserv->nick, $unick, $channel, $reason); core::alog(core::$config->operserv->nick . ': ' . $nick . ' used KICK to remove ' . $unick . ' from ' . $chan); } // now we check 3 things, if the user exists, if the channel exists // and if the user is even in that channel, if they arn't we just leave it }
public function main(&$ircdata, $startup = false) { if (ircd::on_msg(&$ircdata)) { $nick = core::get_nick(&$ircdata, 0); $chan = core::get_chan(&$ircdata, 2); //if ( core::search_nick( $chan ) !== false ) //return false; // bail if it thinks chan == nick. if (!($channel = services::chan_exists($chan, array('channel')))) { return false; } // channel isnt registered, halt immediatly.. // either something has cocked up or someone // has forced us into a channel :S if (chanserv::check_flags($chan, array('F')) === false) { return false; } // we gotta check if the channel has fantasy commands enabled first if (commands::on_fantasy_cmd(&$ircdata, 'help', core::$config->chanserv->nick)) { if (ircd::$halfop) { $help =& chanserv::$help->CS_HELP_FANTASY_ALL1; } else { $help =& chanserv::$help->CS_HELP_FANTASY_ALL2; } foreach ($help as $line) { services::communicate(core::$config->chanserv->nick, $nick, $line, array('p' => core::$config->chanserv->fantasy_prefix)); } } // !help command if (commands::on_fantasy_cmd(&$ircdata, 'owner', core::$config->chanserv->nick) && ircd::$owner) { if (chanserv::check_levels($nick, $channel->channel, array('q', 'f', 'F')) === false) { return false; } if (strpos($ircdata[4], ':') !== false) { mode::type_check($chan, $ircdata[4], '+q', core::$config->chanserv->nick); } elseif (isset($ircdata[4])) { ircd::mode(core::$config->chanserv->nick, $chan, '+q ' . $ircdata[4]); } else { ircd::mode(core::$config->chanserv->nick, $chan, '+q ' . $nick); } // check if another param is specified } // !owner command if (commands::on_fantasy_cmd(&$ircdata, 'deowner', core::$config->chanserv->nick) && ircd::$owner) { if (chanserv::check_levels($nick, $channel->channel, array('q', 'f', 'F')) === false) { return false; } if (strpos($ircdata[4], ':') !== false) { mode::type_check($chan, $ircdata[4], '-q', core::$config->chanserv->nick); } elseif (isset($ircdata[4])) { ircd::mode(core::$config->chanserv->nick, $chan, '-q ' . $ircdata[4]); } else { ircd::mode(core::$config->chanserv->nick, $chan, '-q ' . $nick); } // check if another param is specified } // !deowner command if (commands::on_fantasy_cmd(&$ircdata, 'protect', core::$config->chanserv->nick) && ircd::$protect) { if (chanserv::check_levels($nick, $channel->channel, array('a', 'q', 'f', 'F')) === false) { return false; } if (strpos($ircdata[4], ':') !== false) { mode::type_check($chan, $ircdata[4], '+a', core::$config->chanserv->nick); } elseif (isset($ircdata[4])) { ircd::mode(core::$config->chanserv->nick, $chan, '+a ' . $ircdata[4]); } else { ircd::mode(core::$config->chanserv->nick, $chan, '+a ' . $nick); } // check if another param is specified } // !protect command if (commands::on_fantasy_cmd(&$ircdata, 'deprotect', core::$config->chanserv->nick) && ircd::$protect) { if (chanserv::check_levels($nick, $channel->channel, array('a', 'q', 'f', 'F')) === false) { return false; } if (strtolower($ircdata[4]) == strtolower(core::$config->chanserv->nick)) { return false; } if (strpos($ircdata[4], ':') !== false) { mode::type_check($chan, $ircdata[4], '-a', core::$config->chanserv->nick); } elseif (isset($ircdata[4])) { ircd::mode(core::$config->chanserv->nick, $chan, '-a ' . $ircdata[4]); } else { ircd::mode(core::$config->chanserv->nick, $chan, '-a ' . $nick); } // check if another param is specified } // !protect command if (commands::on_fantasy_cmd(&$ircdata, 'op', core::$config->chanserv->nick)) { if (chanserv::check_levels($nick, $channel->channel, array('o', 'a', 'q', 'f', 'F')) === false) { return false; } if (strpos($ircdata[4], ':') !== false) { mode::type_check($chan, $ircdata[4], '+o', core::$config->chanserv->nick); } elseif (isset($ircdata[4])) { ircd::mode(core::$config->chanserv->nick, $chan, '+o ' . $ircdata[4]); } else { ircd::mode(core::$config->chanserv->nick, $chan, '+o ' . $nick); } // check if another param is specified } // !op command if (commands::on_fantasy_cmd(&$ircdata, 'deop', core::$config->chanserv->nick)) { if (chanserv::check_levels($nick, $channel->channel, array('o', 'a', 'q', 'f', 'F')) === false) { return false; } if (strtolower($ircdata[4]) == strtolower(core::$config->chanserv->nick)) { return false; } if (strpos($ircdata[4], ':') !== false) { mode::type_check($chan, $ircdata[4], '-o', core::$config->chanserv->nick); } elseif (isset($ircdata[4])) { ircd::mode(core::$config->chanserv->nick, $chan, '-o ' . $ircdata[4]); } else { ircd::mode(core::$config->chanserv->nick, $chan, '-o ' . $nick); } // check if another param is specified } // !deop command if (commands::on_fantasy_cmd(&$ircdata, 'halfop', core::$config->chanserv->nick) && ircd::$halfop) { if (chanserv::check_levels($nick, $channel->channel, array('h', 'o', 'a', 'q', 'f', 'F')) === false) { return false; } if (strpos($ircdata[4], ':') !== false) { mode::type_check($chan, $ircdata[4], '+h', core::$config->chanserv->nick); } elseif (isset($ircdata[4])) { ircd::mode(core::$config->chanserv->nick, $chan, '+h ' . $ircdata[4]); } else { ircd::mode(core::$config->chanserv->nick, $chan, '+h ' . $nick); } // check if another param is specified } // !hop command if (commands::on_fantasy_cmd(&$ircdata, 'dehalfop', core::$config->chanserv->nick) && ircd::$halfop) { if (chanserv::check_levels($nick, $channel->channel, array('h', 'o', 'a', 'q', 'f', 'F')) === false) { return false; } if (strtolower($ircdata[4]) == strtolower(core::$config->chanserv->nick)) { return false; } if (strpos($ircdata[4], ':') !== false) { mode::type_check($chan, $ircdata[4], '-h', core::$config->chanserv->nick); } elseif (isset($ircdata[4])) { ircd::mode(core::$config->chanserv->nick, $chan, '-h ' . $ircdata[4]); } else { ircd::mode(core::$config->chanserv->nick, $chan, '-h ' . $nick); } // check if another param is specified } // !dehop command if (commands::on_fantasy_cmd(&$ircdata, 'voice', core::$config->chanserv->nick)) { if (chanserv::check_levels($nick, $channel->channel, array('v', 'h', 'o', 'a', 'q', 'f', 'F')) === false) { return false; } if (strpos($ircdata[4], ':') !== false) { mode::type_check($chan, $ircdata[4], '+v', core::$config->chanserv->nick); } elseif (isset($ircdata[4])) { ircd::mode(core::$config->chanserv->nick, $chan, '+v ' . $ircdata[4]); } else { ircd::mode(core::$config->chanserv->nick, $chan, '+v ' . $nick); } // check if another param is specified } // !voice command if (commands::on_fantasy_cmd(&$ircdata, 'devoice', core::$config->chanserv->nick)) { if (chanserv::check_levels($nick, $channel->channel, array('v', 'h', 'o', 'a', 'q', 'f', 'F')) === false) { return false; } if (strpos($ircdata[4], ':') !== false) { mode::type_check($chan, $ircdata[4], '-v', core::$config->chanserv->nick); } elseif (isset($ircdata[4])) { ircd::mode(core::$config->chanserv->nick, $chan, '-v ' . $ircdata[4]); } else { ircd::mode(core::$config->chanserv->nick, $chan, '-v ' . $nick); } // check if another param is specified } // !devoice command if (commands::on_fantasy_cmd(&$ircdata, 'topic', core::$config->chanserv->nick)) { if (chanserv::check_levels($nick, $channel->channel, array('t', 'F')) === false) { return false; } if (isset($ircdata[4])) { $topicmask = chanserv::get_flags($chan, 't'); // get the topicmask if ($topicmask != null) { $new_topic = core::get_data_after(&$ircdata, 4); $new_topic = str_replace(' *', ' ' . $new_topic, $topicmask); $new_topic = str_replace('\\*', '*', $new_topic); ircd::topic(core::$config->chanserv->nick, $channel->channel, $new_topic); database::update('chans', array('topic' => $new_topic, 'topic_setter' => core::$config->chanserv->nick), array('channel', '=', $channel->channel)); } else { $new_topic = trim(core::get_data_after(&$ircdata, 4)); ircd::topic(core::$config->chanserv->nick, $channel->channel, $new_topic); database::update('chans', array('topic' => $new_topic, 'topic_setter' => core::$config->chanserv->nick), array('channel', '=', $channel->channel)); } // if there isnt, just set it normally. } // make sure there is another mask x] } // !topic command if (commands::on_fantasy_cmd(&$ircdata, 'mode', core::$config->chanserv->nick) || commands::on_fantasy_cmd(&$ircdata, 'm', core::$config->chanserv->nick)) { if (chanserv::check_levels($nick, $channel->channel, array('h', 'o', 'a', 'q', 'F')) === false) { return false; } if (isset($ircdata[4])) { $mode_queue = core::get_data_after(&$ircdata, 4); // get the mode queue if (!core::$nicks[$nick]['ircop']) { $mode_queue[0] = str_replace('O', '', $mode_queue[0]); } // don't let them MODE +O if they're not an IRCop ircd::mode(core::$config->chanserv->nick, $chan, $mode_queue); // check if there are any other parameters in the !mode command } // are we even setting a mode? } // !mode command if (commands::on_fantasy_cmd(&$ircdata, 'kick', core::$config->chanserv->nick)) { if (chanserv::check_levels($nick, $channel->channel, array('r', 'F')) === false) { return false; } // ignore if the nick doesn't have access to perform this if (isset($ircdata[4])) { if (chanserv::check_levels($nick, $channel->channel, array('o', 'F')) && chanserv::check_levels($nick, $channel->channel, array('o', 'F')) === false) { return false; } // check if the user kicking, has the access to kick them. that doesn't make sense, but yeah. if (isset($ircdata[5])) { $reason = core::get_data_after(&$ircdata, 5); ircd::kick(core::$config->chanserv->nick, $ircdata[4], $chan, '(' . $nick . ') ' . ($reason != '') ? $reason : 'No reason'); // kick them with the reason } else { ircd::kick(core::$config->chanserv->nick, $ircdata[4], $chan, $nick); // kick them with no reason } } // make sure a parameter is issued } // !kick command if (commands::on_fantasy_cmd(&$ircdata, 'kickban', core::$config->chanserv->nick)) { if (chanserv::check_levels($nick, $channel->channel, array('r', 'F')) === false) { return false; } // ignore if the nick doesn't have access to perform this if (isset($ircdata[4])) { if (chanserv::check_levels($nick, $channel->channel, array('o', 'F')) && chanserv::check_levels($nick, $channel->channel, array('o', 'F')) === false) { return false; } // check if the user kicking, has the access to kick them. that doesn't make sense, but yeah. if ($user = core::search_nick($ircdata[4])) { ircd::mode(core::$config->chanserv->nick, $chan, '+b *@' . $user['host']); if (isset($ircdata[5])) { $reason = core::get_data_after(&$ircdata, 5); ircd::kick(core::$config->chanserv->nick, $ircdata[4], $chan, '(' . $nick . ') ' . ($reason != '') ? $reason : 'No reason'); // kick them with the reason } else { ircd::kick(core::$config->chanserv->nick, $ircdata[4], $chan, $nick); // kick them with no reason } // check if there is a reason etc. } else { return false; } } // make sure a parameter is issued } // !ban command if (commands::on_fantasy_cmd(&$ircdata, 'ban', core::$config->chanserv->nick)) { if (chanserv::check_levels($nick, $channel->channel, array('r', 'F')) === false) { return false; } // ignore if the nick doesn't have access to perform this if (isset($ircdata[4])) { if (chanserv::check_levels($nick, $channel->channel, array('o', 'F')) && chanserv::check_levels($nick, $channel->channel, array('o', 'F')) === false) { return false; } // check if the user kicking, has the access to kick them. that doesn't make sense, but yeah. if (strpos($ircdata[4], '@') === false && ($user = core::search_nick($ircdata[4]))) { ircd::mode(core::$config->chanserv->nick, $chan, '+b *@' . $user['host']); } else { ircd::mode(core::$config->chanserv->nick, $chan, '+b ' . $ircdata[4]); } // is the hostname in our cache? if not just set a ban on it lol. } } // !ban command if (commands::on_fantasy_cmd(&$ircdata, 'unban', core::$config->chanserv->nick)) { if (chanserv::check_levels($nick, $channel->channel, array('r', 'F')) === false) { return false; } if (isset($ircdata[4])) { if (strpos($ircdata[4], '@') === false && ($user = core::search_nick($ircdata[4]))) { ircd::mode(core::$config->chanserv->nick, $chan, '-b *@' . $user['host']); } else { ircd::mode(core::$config->chanserv->nick, $chan, '-b ' . $ircdata[4]); } // is the hostname in our cache? if not unban it.. } } // !unban command if (commands::on_fantasy_cmd(&$ircdata, 'flags', core::$config->chanserv->nick) && isset(modules::$list['cs_flags'])) { $n_ircdata = $ircdata; unset($n_ircdata[0], $n_ircdata[1], $n_ircdata[2], $n_ircdata[3]); array_unshift($n_ircdata, $chan); // construct a new ircdata array cs_flags::flags_command($nick, $n_ircdata, true); // execute the flags command with the new data unset($n_ircdata); // get rid of this, isn't longer needed } // !flags command (experimental) if (commands::on_fantasy_cmd(&$ircdata, 'levels', core::$config->chanserv->nick) && isset(modules::$list['cs_levels'])) { $n_ircdata = $ircdata; unset($n_ircdata[0], $n_ircdata[1], $n_ircdata[2], $n_ircdata[3]); array_unshift($n_ircdata, $chan); // construct a new ircdata array cs_levels::levels_command($nick, $n_ircdata, true); // execute the flags command with the new data unset($n_ircdata); // get rid of this, isn't longer needed } // !levels command (experimental) if (commands::on_fantasy_cmd(&$ircdata, 'sync', core::$config->chanserv->nick) && isset(modules::$list['cs_levels'])) { cs_levels::on_create(core::$chans[$chan]['users'], $channel); // execute on_create, cause we just treat it as that // this is kinda a shortcut, but well worth it. ircd::notice(core::$config->chanserv->nick, $chan, '' . $nick . ' used SYNC'); } // !sync command (experimental) } // only trigger on channel messages }