X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_messageflood.cpp;h=436e578671a1af4876a95bc8e138c5373e584ec9;hb=6f4bf8ffd367f35b96265fea1ad01fb1acf2adcd;hp=ce10daed292f182e529d44fe5db3172a7d8d87e2;hpb=cfb2c2fff47d99f43434de7db339c2f2237c6bad;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_messageflood.cpp b/src/modules/m_messageflood.cpp index ce10daed2..436e57867 100644 --- a/src/modules/m_messageflood.cpp +++ b/src/modules/m_messageflood.cpp @@ -21,13 +21,12 @@ using namespace std; #include "users.h" #include "channels.h" #include "modules.h" -#include "helperfuncs.h" #include "inspircd.h" /* $ModDesc: Provides channel mode +f (message flood protection) */ - - +/** Holds flood settings and state for mode +f + */ class floodsettings : public classbase { public: @@ -81,6 +80,8 @@ class floodsettings : public classbase } }; +/** Handles channel mode +f + */ class MsgFlood : public ModeHandler { public: @@ -155,6 +156,19 @@ class MsgFlood : public ModeHandler channel->SetModeParam('f', parameter.c_str(), true); return MODEACTION_ALLOW; } + else + { + if (((nlines != f->lines) || (nsecs != f->secs)) && ((nsecs > 0) && (nlines > 0))) + { + delete f; + floodsettings *f = new floodsettings(ban,nsecs,nlines); + parameter = ConvToStr(nlines) + ":" +ConvToStr(nsecs); + channel->Shrink("flood"); + channel->Extend("flood",f); + channel->SetModeParam('f', parameter.c_str(), true); + return MODEACTION_ALLOW; + } + } } } else @@ -232,7 +246,7 @@ class ModuleMsgFlood : public Module } } - virtual void OnUserMessage(userrec* user, void* dest, int target_type, const std::string &text, char status) + virtual void OnUserMessage(userrec* user, void* dest, int target_type, const std::string &text, char status, const CUList &exempt_list) { if (target_type == TYPE_CHANNEL) { @@ -240,7 +254,7 @@ class ModuleMsgFlood : public Module } } - virtual void OnUserNotice(userrec* user, void* dest, int target_type, const std::string &text, char status) + virtual void OnUserNotice(userrec* user, void* dest, int target_type, const std::string &text, char status, const CUList &exempt_list) { if (target_type == TYPE_CHANNEL) { @@ -260,22 +274,18 @@ class ModuleMsgFlood : public Module void Implements(char* List) { - List[I_On005Numeric] = List[I_OnChannelDelete] = List[I_OnUserNotice] = List[I_OnUserMessage] = 1; - } - - virtual void On005Numeric(std::string &output) - { - ServerInstance->Modes->InsertMode(output, "f", 3); + List[I_OnChannelDelete] = List[I_OnUserNotice] = List[I_OnUserMessage] = 1; } virtual ~ModuleMsgFlood() { + ServerInstance->Modes->DelMode(mf); DELETE(mf); } virtual Version GetVersion() { - return Version(1,0,0,0,VF_STATIC|VF_VENDOR); + return Version(1, 1, 0, 0, VF_COMMON | VF_VENDOR, API_VERSION); } };