X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_messageflood.cpp;h=ef7bf9d5266b2cf005c91647d95831fdeaa5c1e1;hb=19cc8380fb9060add68852e40846b10e4d1f18f5;hp=a2fdc115ef9b65bc0c35fc946b8035f4ec1da267;hpb=ac7defcd3e52695dcf5e5150e9fe3e1624205e64;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_messageflood.cpp b/src/modules/m_messageflood.cpp index a2fdc115e..ef7bf9d52 100644 --- a/src/modules/m_messageflood.cpp +++ b/src/modules/m_messageflood.cpp @@ -25,8 +25,6 @@ #include "inspircd.h" -/* $ModDesc: Provides channel mode +f (message flood protection) */ - /** Holds flood settings and state for mode +f */ class floodsettings @@ -102,16 +100,14 @@ class MsgFlood : public ModeHandler ext.set(channel, new floodsettings(ban, nsecs, nlines)); parameter = std::string(ban ? "*" : "") + ConvToStr(nlines) + ":" + ConvToStr(nsecs); - channel->SetModeParam('f', parameter); return MODEACTION_ALLOW; } else { - if (!channel->IsModeSet('f')) + if (!channel->IsModeSet(this)) return MODEACTION_DENY; ext.unset(channel); - channel->SetModeParam('f', ""); return MODEACTION_ALLOW; } } @@ -128,18 +124,15 @@ class ModuleMsgFlood : public Module { } - void init() + void init() CXX11_OVERRIDE { - if (!ServerInstance->Modes->AddMode(&mf)) - throw ModuleException("Could not add new modes!"); - ServerInstance->Extensions.Register(&mf.ext); - Implementation eventlist[] = { I_OnUserPreNotice, I_OnUserPreMessage }; - ServerInstance->Modules->Attach(eventlist, this, 2); + ServerInstance->Modules->AddService(mf); + ServerInstance->Modules->AddService(mf.ext); } ModResult ProcessMessages(User* user,Channel* dest, const std::string &text) { - if ((!IS_LOCAL(user)) || !dest->IsModeSet('f')) + if ((!IS_LOCAL(user)) || !dest->IsModeSet(mf)) return MOD_RES_PASSTHRU; if (ServerInstance->OnCheckExemption(user,dest,"flood") == MOD_RES_ALLOW) @@ -157,14 +150,14 @@ class ModuleMsgFlood : public Module std::vector parameters; parameters.push_back(dest->name); parameters.push_back("+b"); - parameters.push_back(user->MakeWildHost()); - ServerInstance->SendGlobalMode(parameters, ServerInstance->FakeClient); + parameters.push_back("*!*@" + user->dhost); + ServerInstance->Modes->Process(parameters, ServerInstance->FakeClient); } - char kickmessage[MAXBUF]; - snprintf(kickmessage, MAXBUF, "Channel flood triggered (limit is %u lines in %u secs)", f->lines, f->secs); + const std::string kickMessage = "Channel flood triggered (limit is " + ConvToStr(f->lines) + + " in " + ConvToStr(f->secs) + " secs)"; - dest->KickUser(ServerInstance->FakeClient, user, kickmessage); + dest->KickUser(ServerInstance->FakeClient, user, kickMessage); return MOD_RES_DENY; } @@ -173,15 +166,7 @@ class ModuleMsgFlood : public Module return MOD_RES_PASSTHRU; } - ModResult OnUserPreMessage(User *user, void *dest, int target_type, std::string &text, char status, CUList &exempt_list) - { - if (target_type == TYPE_CHANNEL) - return ProcessMessages(user,(Channel*)dest,text); - - return MOD_RES_PASSTHRU; - } - - ModResult OnUserPreNotice(User *user, void *dest, int target_type, std::string &text, char status, CUList &exempt_list) + ModResult OnUserPreMessage(User* user, void* dest, int target_type, std::string& text, char status, CUList& exempt_list, MessageType msgtype) CXX11_OVERRIDE { if (target_type == TYPE_CHANNEL) return ProcessMessages(user,(Channel*)dest,text); @@ -189,11 +174,13 @@ class ModuleMsgFlood : public Module return MOD_RES_PASSTHRU; } - ~ModuleMsgFlood() + void Prioritize() { + // we want to be after all modules that might deny the message (e.g. m_muteban, m_noctcp, m_blockcolor, etc.) + ServerInstance->Modules->SetPriority(this, I_OnUserPreMessage, PRIORITY_LAST); } - Version GetVersion() + Version GetVersion() CXX11_OVERRIDE { return Version("Provides channel mode +f (message flood protection)", VF_VENDOR); }