aboutsummaryrefslogtreecommitdiff
path: root/src/modules/m_messageflood.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/m_messageflood.cpp')
-rw-r--r--src/modules/m_messageflood.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/modules/m_messageflood.cpp b/src/modules/m_messageflood.cpp
index 049e5ab38..faa4e5912 100644
--- a/src/modules/m_messageflood.cpp
+++ b/src/modules/m_messageflood.cpp
@@ -78,6 +78,12 @@ public:
return (it->second.messages >= this->messages);
}
+ void Clear(User* who)
+ {
+ counters.erase(who);
+ }
+
+
CounterMap::iterator Find(User* who)
{
CounterMap::iterator ret = counters.end();
@@ -244,6 +250,7 @@ private:
double notice;
double privmsg;
double tagmsg;
+ bool resetonhit;
std::string message;
void CreateBan(Channel* channel, User* user, bool mute)
@@ -285,6 +292,7 @@ public:
tagmsg = tag->getNum<double>("tagmsg", 0.2);
message = tag->getString("message", "Message flood detected (trigger is %messages% messages in %duration.long%)", 1);
mf.extended = tag->getBool("extended");
+ resetonhit = tag->getBool("resetonhit", !mf.extended);
mf.SetSyntax();
}
@@ -324,6 +332,8 @@ public:
case MsgFloodAction::BAN:
InformUser(dest, user, msg);
CreateBan(dest, user, false);
+ if (resetonhit)
+ f->Clear(user);
break;
case MsgFloodAction::BLOCK:
@@ -332,16 +342,22 @@ public:
case MsgFloodAction::KICK:
dest->KickUser(ServerInstance->FakeClient, user, msg);
+ if (resetonhit)
+ f->Clear(user);
break;
case MsgFloodAction::KICK_BAN:
CreateBan(dest, user, false);
dest->KickUser(ServerInstance->FakeClient, user, msg);
+ if (resetonhit)
+ f->Clear(user);
break;
case MsgFloodAction::MUTE:
InformUser(dest, user, msg);
CreateBan(dest, user, true);
+ if (resetonhit)
+ f->Clear(user);
break;
}