]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_repeat.cpp
Convert a bunch of time-related config options to getDuration.
[user/henk/code/inspircd.git] / src / modules / m_repeat.cpp
index 6ad3a6aa7ed9846e1e0d6af87547804948008af2..6c34648e0cadd210157ed785b04add2d3262c1a7 100644 (file)
@@ -18,6 +18,7 @@
 
 
 #include "inspircd.h"
+#include "modules/exemption.h"
 
 class ChannelSettings
 {
@@ -110,7 +111,7 @@ class RepeatMode : public ParamMode<RepeatMode, SimpleExtItem<ChannelSettings> >
                {
                        mx[1][0] = i + 1;
                        for (unsigned int j = 0; j < l2; j++)
-                   mx[1][j + 1] = std::min(std::min(mx[1][j] + 1, mx[0][j + 1] + 1), mx[0][j] + ((s1[i] == s2[j]) ? 0 : 1));
+                               mx[1][j + 1] = std::min(std::min(mx[1][j] + 1, mx[0][j + 1] + 1), mx[0][j] + ((s1[i] == s2[j]) ? 0 : 1));
 
                        mx[0].swap(mx[1]);
                }
@@ -122,15 +123,15 @@ class RepeatMode : public ParamMode<RepeatMode, SimpleExtItem<ChannelSettings> >
 
        RepeatMode(Module* Creator)
                : ParamMode<RepeatMode, SimpleExtItem<ChannelSettings> >(Creator, "repeat", 'E')
-               , MemberInfoExt("repeat_memb", Creator)
+               , MemberInfoExt("repeat_memb", ExtensionItem::EXT_MEMBERSHIP, Creator)
        {
        }
 
        void OnUnset(User* source, Channel* chan)
        {
                // Unset the per-membership extension when the mode is removed
-               const UserMembList& users = chan->GetUsers();
-               for (UserMembCIter i = users.begin(); i != users.end(); ++i)
+               const Channel::MemberMap& users = chan->GetUsers();
+               for (Channel::MemberMap::const_iterator i = users.begin(); i != users.end(); ++i)
                        MemberInfoExt.unset(i->second);
        }
 
@@ -232,7 +233,7 @@ class RepeatMode : public ParamMode<RepeatMode, SimpleExtItem<ChannelSettings> >
                ConfigTag* conf = ServerInstance->Config->ConfValue("repeat");
                ms.MaxLines = conf->getInt("maxlines", 20);
                ms.MaxBacklog = conf->getInt("maxbacklog", 20);
-               ms.MaxSecs = conf->getInt("maxsecs", 0);
+               ms.MaxSecs = conf->getDuration("maxtime", conf->getInt("maxsecs", 0));
 
                ms.MaxDiff = conf->getInt("maxdistance", 50);
                if (ms.MaxDiff > 100)
@@ -339,10 +340,15 @@ class RepeatMode : public ParamMode<RepeatMode, SimpleExtItem<ChannelSettings> >
 
 class RepeatModule : public Module
 {
+       CheckExemption::EventProvider exemptionprov;
        RepeatMode rm;
 
  public:
-       RepeatModule() : rm(this) {}
+       RepeatModule()
+               : exemptionprov(this)
+               , rm(this)
+       {
+       }
 
        void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE
        {
@@ -363,24 +369,24 @@ class RepeatModule : public Module
                if (!memb)
                        return MOD_RES_PASSTHRU;
 
-               if (ServerInstance->OnCheckExemption(user, chan, "repeat") == MOD_RES_ALLOW)
+               ModResult res;
+               FIRST_MOD_RESULT_CUSTOM(exemptionprov, CheckExemption::EventListener, OnCheckExemption, res, (user, chan, "repeat"));
+               if (res == MOD_RES_ALLOW)
                        return MOD_RES_PASSTHRU;
 
                if (rm.MatchLine(memb, settings, text))
                {
                        if (settings->Action == ChannelSettings::ACT_BLOCK)
                        {
-                               user->WriteNotice("*** This line is too similiar to one of your last lines.");
+                               user->WriteNotice("*** This line is too similar to one of your last lines.");
                                return MOD_RES_DENY;
                        }
 
                        if (settings->Action == ChannelSettings::ACT_BAN)
                        {
-                               std::vector<std::string> parameters;
-                               parameters.push_back(memb->chan->name);
-                               parameters.push_back("+b");
-                               parameters.push_back("*!*@" + user->dhost);
-                               ServerInstance->Modes->Process(parameters, ServerInstance->FakeClient);
+                               Modes::ChangeList changelist;
+                               changelist.push_add(ServerInstance->Modes->FindMode('b', MODETYPE_CHANNEL), "*!*@" + user->dhost);
+                               ServerInstance->Modes->Process(ServerInstance->FakeClient, chan, NULL, changelist);
                        }
 
                        memb->chan->KickUser(ServerInstance->FakeClient, user, "Repeat flood");
@@ -396,7 +402,7 @@ class RepeatModule : public Module
 
        Version GetVersion() CXX11_OVERRIDE
        {
-               return Version("Provides the +E channel mode - for blocking of similiar messages", VF_COMMON|VF_VENDOR, rm.GetModuleSettings());
+               return Version("Provides the +E channel mode - for blocking of similar messages", VF_COMMON|VF_VENDOR, rm.GetModuleSettings());
        }
 };