X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_operprefix.cpp;h=640f2c5d8dcf98a5f07b33692c365f2e0e99d0a1;hb=8085aa879bd989b526791797910295944a364084;hp=5c051c9169376ba565cb69cedfd7786e262eef0c;hpb=169acfe584baa6c464119cf19491396007a9a765;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_operprefix.cpp b/src/modules/m_operprefix.cpp index 5c051c916..640f2c5d8 100644 --- a/src/modules/m_operprefix.cpp +++ b/src/modules/m_operprefix.cpp @@ -2,8 +2,8 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2008 InspIRCd Development Team - * See: http://www.inspircd.org/wiki/index.php/Credits + * InspIRCd: (C) 2002-2009 InspIRCd Development Team + * See: http://wiki.inspircd.org/Credits * * This program is free but copyrighted software; see * the file COPYING for details. @@ -11,12 +11,15 @@ * --------------------------------------------------- */ -/* - by Chernov-Phoenix Alexey (Phoenix@RusNet) mailto:phoenix /email address separator/ pravmail.ru */ +/* + * Originally by Chernov-Phoenix Alexey (Phoenix@RusNet) mailto:phoenix /email address separator/ pravmail.ru + */ + +/* $ModDesc: Gives opers cmode +y which provides a staff prefix. */ #include "inspircd.h" -static char prefixchar; +#define OPERPREFIX_VALUE 1000000 std::set* SetupExt(User* user) { @@ -48,7 +51,12 @@ void AddPrefixChan(User* user, Channel* channel) class OperPrefixMode : public ModeHandler { public: - OperPrefixMode(InspIRCd* Instance) : ModeHandler(Instance, 'y', 1, 1, true, MODETYPE_CHANNEL, false, prefixchar) { } + OperPrefixMode(InspIRCd* Instance, char pfx) : ModeHandler(Instance, 'y', 1, 1, true, MODETYPE_CHANNEL, false, pfx, pfx, TR_NICK) { } + + unsigned int GetPrefixRank() + { + return OPERPREFIX_VALUE; + } ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, bool adding, bool servermode) { @@ -103,27 +111,25 @@ class ModuleOperPrefixMode : public Module ModuleOperPrefixMode(InspIRCd* Me) : Module(Me) { ConfigReader Conf(ServerInstance); - std::string tmp; - tmp = Conf.ReadValue("operprefix", "prefix", "!", 0, false); - strlcpy(&prefixchar,tmp.c_str(),2); + std::string pfx = Conf.ReadValue("operprefix", "prefix", "!", 0, false); - opm = new OperPrefixMode(ServerInstance); + opm = new OperPrefixMode(ServerInstance, pfx[0]); if ((!ServerInstance->Modes->AddMode(opm))) throw ModuleException("Could not add a new mode!"); - - Implementation eventlist[] = { I_OnPostJoin, I_OnCleanup, I_OnUserQuit, I_OnUserKick, I_OnUserPart }; - ServerInstance->Modules->Attach(eventlist, this, 5); + + Implementation eventlist[] = { I_OnPostJoin, I_OnCleanup, I_OnUserQuit, I_OnUserKick, I_OnUserPart, I_OnOper }; + ServerInstance->Modules->Attach(eventlist, this, 6); } - virtual void PushChanMode(Channel* channel, User* user, bool negate = false) + void PushChanMode(Channel* channel, User* user, bool negate = false) { if (negate) DelPrefixChan(user, channel); else AddPrefixChan(user, channel); - char modeline[]="+y"; + char modeline[] = "+y"; if (negate) - modeline [0]='-'; + modeline[0] = '-'; std::vector modechange; modechange.push_back(channel->name); modechange.push_back(modeline); @@ -133,10 +139,6 @@ class ModuleOperPrefixMode : public Module virtual void OnPostJoin(User *user, Channel *channel) { - // This may look wrong, but I don't think it is.. PushChanMode will send FMODE which should sort it all out. - if (!IS_LOCAL(user)) - return; - if (user && IS_OPER(user)) { if (user->IsModeSet('H')) @@ -157,16 +159,25 @@ class ModuleOperPrefixMode : public Module return 0; } + virtual void OnOper(User *user, const std::string&) + { + if (user && !user->IsModeSet('H')) + { + for (UCListIter v = user->chans.begin(); v != user->chans.end(); v++) + { + PushChanMode(v->first, user); + } + } + } + virtual ~ModuleOperPrefixMode() { ServerInstance->Modes->DelMode(opm); delete opm; } - virtual void CleanUser(User* user, bool quitting=false) + void CleanUser(User* user, bool quitting) { - if (!IS_LOCAL(user)) - return; std::set* ext; if (user->GetExt("m_operprefix",ext)) @@ -176,7 +187,7 @@ class ModuleOperPrefixMode : public Module { for (UCListIter v = user->chans.begin(); v != user->chans.end(); v++) { - ModePair ms=opm->ModeSet(NULL, NULL , v->first, user->nick); + ModePair ms = opm->ModeSet(NULL, NULL , v->first, user->nick); if (ms.first) { PushChanMode(v->first, user, true); @@ -194,7 +205,7 @@ class ModuleOperPrefixMode : public Module if (target_type == TYPE_USER) { User* user = (User*)item; - CleanUser(user); + CleanUser(user, false); } } @@ -215,9 +226,8 @@ class ModuleOperPrefixMode : public Module virtual Version GetVersion() { - return Version("$Id$", VF_COMMON, API_VERSION); + return Version("$Id$", VF_COMMON | VF_VENDOR, API_VERSION); } }; MODULE_INIT(ModuleOperPrefixMode) -