]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_messageflood.cpp
Introduce ModeProcessFlags, can be passed to ModeParser::Process() to indicate local...
[user/henk/code/inspircd.git] / src / modules / m_messageflood.cpp
index 814eee5ef7e8757c08aff551fbb11586486e7fca..86296094b3151af2c81828a5b32c4bbaa6018747 100644 (file)
@@ -128,12 +128,11 @@ class ModuleMsgFlood : public Module
        {
        }
 
-       void init()
+       void init() CXX11_OVERRIDE
        {
                ServerInstance->Modules->AddService(mf);
                ServerInstance->Modules->AddService(mf.ext);
-               Implementation eventlist[] = { I_OnUserPreNotice, I_OnUserPreMessage };
-               ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation));
+               ServerInstance->Modules->Attach(I_OnUserPreMessage, this);
        }
 
        ModResult ProcessMessages(User* user,Channel* dest, const std::string &text)
@@ -156,14 +155,14 @@ class ModuleMsgFlood : public Module
                                        std::vector<std::string> 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;
                        }
@@ -172,7 +171,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)
+       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);
@@ -180,19 +179,13 @@ class ModuleMsgFlood : public Module
                return MOD_RES_PASSTHRU;
        }
 
-       ModResult OnUserPreNotice(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;
-       }
-
-       ~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);
        }