CommandNum::Builder::Builder(SpanningTree::RemoteUser* target, const Numeric::Numeric& numeric) : CmdBuilder("NUM") { TreeServer* const server = (numeric.GetServer() ? (static_cast<TreeServer*>(numeric.GetServer())) : Utils->TreeRoot); push(server->GetID()).push(target->uuid).push(InspIRCd::Format("%03u", numeric.GetNumeric())); const std::vector<std::string>& params = numeric.GetParams(); if (!params.empty()) { for (std::vector<std::string>::const_iterator i = params.begin(); i != params.end()-1; ++i) push(*i); push_last(params.back()); } }
ModResult OnWhoLine(const Who::Request& request, LocalUser* source, User* user, Membership* memb, Numeric::Numeric& numeric) override { if (user->IsModeSet(hm) && !source->HasPrivPermission("users/auspex")) { // Hide the line completely if doing a "/who * o" query if (request.flags['o']) return MOD_RES_DENY; size_t flag_index; if (!request.GetFieldIndex('f', flag_index)) return MOD_RES_PASSTHRU; // hide the "*" that marks the user as an oper from the /WHO line // #chan ident localhost insp22.test nick H@ :0 Attila if (numeric.GetParams().size() <= flag_index) return MOD_RES_PASSTHRU; std::string& param = numeric.GetParams()[flag_index]; const std::string::size_type pos = param.find('*'); if (pos != std::string::npos) param.erase(pos, 1); } return MOD_RES_PASSTHRU; }
ModResult OnNumeric(User* user, const Numeric::Numeric& numeric) override { if (numeric.GetNumeric() != RPL_LUSEROP || active || user->HasPrivPermission("users/auspex")) return MOD_RES_PASSTHRU; // If there are no visible operators then we shouldn't send the numeric. size_t opercount = ServerInstance->Users.all_opers.size() - hm.opercount; if (opercount) { active = true; user->WriteNumeric(RPL_LUSEROP, opercount, "operator(s) online"); active = false; } return MOD_RES_DENY; }
ModResult OnWhoisLine(Whois::Context& whois, Numeric::Numeric& numeric) override { /* Dont display numeric 313 (RPL_WHOISOPER) if they have +H set and the * person doing the WHOIS is not an oper */ if (numeric.GetNumeric() != 313) return MOD_RES_PASSTHRU; if (!whois.GetTarget()->IsModeSet(hm)) return MOD_RES_PASSTHRU; if (!whois.GetSource()->HasPrivPermission("users/auspex")) return MOD_RES_DENY; return MOD_RES_PASSTHRU; }