X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_autoop.cpp;h=f7936f3576e0c448707f2ff87dfc0a4e1652bfa7;hb=80e81e3b81b779901fd9d67f8ae030ee30c0bcec;hp=8c7f300daba11b60cbcbd85d79de719edf69e425;hpb=761e6d75ba37b984998952940ed681e79e456142;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_autoop.cpp b/src/modules/m_autoop.cpp index 8c7f300da..f7936f357 100644 --- a/src/modules/m_autoop.cpp +++ b/src/modules/m_autoop.cpp @@ -1,7 +1,10 @@ /* * InspIRCd -- Internet Relay Chat Daemon * - * Copyright (C) 2011 Jackmcbarn + * Copyright (C) 2013, 2017-2020 Sadie Powell + * Copyright (C) 2012-2015 Attila Molnar + * Copyright (C) 2012, 2019 Robby + * Copyright (C) 2011 jackmcbarn * Copyright (C) 2010 Daniel De Graaf * * This file is part of InspIRCd. InspIRCd is free software: you can @@ -21,14 +24,21 @@ #include "inspircd.h" #include "listmode.h" -/** Handles +w channel mode - */ +enum +{ + // InspIRCd-specific. + RPL_ACCESSLIST = 910, + RPL_ENDOFACCESSLIST = 911 +}; + class AutoOpList : public ListModeBase { public: - AutoOpList(Module* Creator) : ListModeBase(Creator, "autoop", 'w', "End of Channel Access List", 910, 911, true) + AutoOpList(Module* Creator) + : ListModeBase(Creator, "autoop", 'w', "End of Channel Access List", RPL_ACCESSLIST, RPL_ENDOFACCESSLIST, true) { - levelrequired = OP_VALUE; + ranktoset = ranktounset = OP_VALUE; + syntax = ":"; tidy = false; } @@ -41,7 +51,7 @@ class AutoOpList : public ListModeBase return mh ? mh->IsPrefixMode() : NULL; } - ModResult AccessCheck(User* source, Channel* channel, std::string ¶meter, bool adding) + ModResult AccessCheck(User* source, Channel* channel, std::string ¶meter, bool adding) CXX11_OVERRIDE { std::string::size_type pos = parameter.find(':'); if (pos == 0 || pos == std::string::npos) @@ -52,7 +62,7 @@ class AutoOpList : public ListModeBase if (adding && !mh) { - source->WriteNumeric(415, mid, InspIRCd::Format("Cannot find prefix mode '%s' for autoop", mid.c_str())); + source->WriteNumeric(ERR_UNKNOWNMODE, mid, InspIRCd::Format("Cannot find prefix mode '%s' for autoop", mid.c_str())); return MOD_RES_DENY; } else if (!mh) @@ -61,9 +71,10 @@ class AutoOpList : public ListModeBase std::string dummy; if (mh->AccessCheck(source, channel, dummy, true) == MOD_RES_DENY) return MOD_RES_DENY; - if (mh->GetLevelRequired() > mylevel) + if (mh->GetLevelRequired(adding) > mylevel) { - source->WriteNumeric(ERR_CHANOPRIVSNEEDED, channel->name, InspIRCd::Format("You must be able to set mode '%s' to include it in an autoop", mid.c_str())); + source->WriteNumeric(ERR_CHANOPRIVSNEEDED, channel->name, InspIRCd::Format("You must be able to %s mode %c (%s) to %s an autoop containing it", + adding ? "set" : "unset", mh->GetModeChar(), mh->name.c_str(), adding ? "add" : "remove")); return MOD_RES_DENY; } return MOD_RES_PASSTHRU; @@ -111,7 +122,7 @@ class ModuleAutoOp : public Module Version GetVersion() CXX11_OVERRIDE { - return Version("Provides support for the +w channel mode", VF_VENDOR); + return Version("Adds channel mode w (autoop) which allows channel operators to define an access list which gives status ranks to users on join.", VF_VENDOR); } };