X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_messageflood.cpp;h=52174792f53f45cc0ffb29e7f0e2a7c4a55780ee;hb=3a7dd5b129450b94e0a87b8ad5009da70905b8e5;hp=dc2513f3de2cba69d1c121d3f091d3b712d95ffa;hpb=3382adb9e9a79748b4db09bb41a296861800fa2d;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_messageflood.cpp b/src/modules/m_messageflood.cpp index dc2513f3d..52174792f 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 "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 @@ -260,21 +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) - { + 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, 0, 0, 0, VF_COMMON | VF_VENDOR); } };