#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:
}
};
+/** Handles channel mode +f
+ */
class MsgFlood : public ModeHandler
{
public:
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
void Implements(char* List)
{
- List[I_On005Numeric] = List[I_OnChannelDelete] = List[I_OnUserNotice] = List[I_OnUserMessage] = 1;
- }
-
- virtual void On005Numeric(std::string &output)
- {
- ServerInstance->Modes->InsertMode(output, "f", 3);
+ 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);
}
};