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? }
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 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. } }
public function main(&$ircdata, $startup = false) { if (ircd::on_chan_create(&$ircdata)) { $chans = explode(',', $ircdata[2]); // the chans 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; } // if the channel doesn't exist we return false, to save us the hassle of wasting // resources on this stuff below. self::on_create($nusers, $channel); // on_create event } } // we give out the nessicary access when a channel is created :) if (ircd::on_join(&$ircdata)) { $nick = core::get_nick(&$ircdata, 0); $chans = explode(',', $ircdata[2]); // get the channel & nick foreach ($chans as $chan) { if (!($channel = services::chan_exists($chan, array('channel')))) { return false; } // if the channel doesn't exist we return false, to save us the hassle of wasting // resources on this stuff below. if ($nick == core::$config->chanserv->nick) { continue; } // skip us :D $hostname = core::get_full_hostname($nick); // generate a hostname if ($reason = chanserv::check_levels($nick, $chan, array('b'), true, false, true)) { ircd::mode(core::$config->chanserv->nick, $chan, '+b *@' . core::$nicks[$nick]['host']); ircd::kick(core::$config->chanserv->nick, $nick, $chan, $reason); return false; } // check for bans before access $access_array = self::get_access($channel->channel); // get the access array foreach ($access_array as $target => $access) { if ($target == $nick) { $remove_access = false; // don't remove access self::give_access($channel->channel, $nick, $access, chanserv::check_flags($chan, array('S'))); // give them access break; // break cause we've found a match } elseif (strpos($target, '@') !== false && services::match($hostname, $target)) { $remove_access = false; // don't remove access self::give_access($channel->channel, $nick, $access, chanserv::check_flags($chan, array('S'))); // give them access break; // break cause we've found a match } elseif (strpos(core::$chans[$channel->channel]['users'][$nick], 'o') !== false) { $remove_access = true; // set remove access to true continue 1; // continue to next loop to check other access records } elseif (strpos(core::$chans[$channel->channel]['users'][$nick], 'h') !== false) { $remove_access = true; // set remove access to true continue 1; // continue to next loop to check other access records } else { continue 1; // continue to next loop to check other access records } // we check if the user has access, if they do break; // we also check if they dont have access and have op, if they do remove it. } // loop through the access records if ($remove_access) { ircd::mode(core::$config->chanserv->nick, $channel->channel, '-oh ' . $nick . ' ' . $nick); } // easy fix to stop stuff like this below happening. // [20:27:19] * ChanServ sets mode: -o N0valyfe // [20:27:19] * ChanServ sets mode: +o N0valyfe } } // and the same when someone joins }
public static function on_join(&$ircdata) { if (ircd::on_join(&$ircdata)) { $chans = explode(',', $ircdata[2]); // find the chans. foreach ($chans as $chan) { if (services::chan_exists($chan, array('channel', 'topic')) !== false) { database::update('chans', array('last_timestamp' => core::$network_time), array('channel', '=', $chan)); // lets update the last used timestamp } // is the channel registered? } // we have to do this shit, because unreal has JOINs made up of #chan1,#chan2 craq // seriously, in server 2 server? have a laugh son. } }
public static function check_channel($nick, $chan, $help) { if ($chan == '' || $chan[0] != '#') { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_INVALID_SYNTAX_RE, array('help' => $help)); return false; // wrong syntax } // make sure they've entered a channel if (!($channel = services::chan_exists($chan, array('channel')))) { services::communicate(core::$config->chanserv->nick, $nick, &chanserv::$help->CS_UNREGISTERED_CHAN, array('chan' => $chan)); return false; } // make sure the channel exists. return $channel; }
public function main(&$ircdata, $startup = false) { if (ircd::on_topic(&$ircdata) || ircd::on_ftopic(&$ircdata)) { $chan = core::get_chan(&$ircdata, 2); $topic = core::$chans[$chan]['topic']; $setter = core::$chans[$chan]['topic_setter']; // i forgot this was done by the protocol modules if ($channel = services::chan_exists($chan, array('channel', 'topic'))) { if (chanserv::check_flags($chan, array('T')) && chanserv::check_flags($chan, array('K')) && $channel->topic != $topic) { ircd::topic(core::$config->chanserv->nick, $channel->channel, $channel->topic); database::update('chans', array('topic_setter' => core::$config->chanserv->nick), array('channel', '=', $chan)); return false; // reset it i reckon. } elseif ($channel->topiclock == 0) { database::update('chans', array('topic' => $topic, 'topic_setter' => $setter), array('channel', '=', $chan)); // OTHERWISE, update it. } // some housekeepin. } // make sure the channel exists. } // now we check for topiclocking // moved this from cs_set to here // there was 2 versions O.o }
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 }
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 function main(&$ircdata, $startup = false) { 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', 'suspended', 'suspend_reason'))) { if ($channel->suspended == 1) { if (!core::$nicks[$nick]['ircop']) { ircd::kick(core::$config->chanserv->nick, $nick, $channel->channel, $channel->suspend_reason); } // boot } // it's also suspended } // channel is registered } } // on_join trigger for forbidden channels if (ircd::on_chan_create(&$ircdata)) { $chans = explode(',', $ircdata[2]); // chans 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', 'suspended', 'suspend_reason'))) { if ($channel->suspended == 1) { foreach ($nusers as $nick => $modes) { if (!core::$nicks[$nick]['ircop']) { ircd::kick(core::$config->chanserv->nick, $nick, $channel->channel, $channel->suspend_reason); } } // boot } // it's also suspended } // channel is registered } } // and same with channels being created }