Port to new API (last mode that has akward parameters done, yay!)

git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@4224 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
brain 2006-07-09 15:14:14 +00:00
parent 8be30d2589
commit 9d8022a065

View File

@ -83,30 +83,18 @@ class floodsettings
} }
}; };
class ModuleMsgFlood : public Module class MsgFlood : public ModeHandler
{ {
Server *Srv;
public: public:
MsgFlood() : ModeHandler('f', 1, 0, false, MODETYPE_CHANNEL, false) { }
ModuleMsgFlood(Server* Me) ModeAction OnModeChange(userrec* source, userrec* dest, chanrec* channel, std::string &parameter, bool adding)
: Module::Module(Me)
{ {
Srv = Me; if (adding)
Srv->AddExtendedMode('f',MT_CHANNEL,false,1,0);
}
virtual int OnExtendedMode(userrec* user, void* target, char modechar, int type, bool mode_on, string_list &params)
{ {
if ((modechar == 'f') && (type == MT_CHANNEL))
{
if (mode_on)
{
std::string FloodParams = params[0];
chanrec* c = (chanrec*)target;
char ndata[MAXBUF]; char ndata[MAXBUF];
char* data = ndata; char* data = ndata;
strlcpy(ndata,FloodParams.c_str(),MAXBUF); strlcpy(ndata,parameter.c_str(),MAXBUF);
char* lines = data; char* lines = data;
char* secs = NULL; char* secs = NULL;
bool ban = false; bool ban = false;
@ -137,39 +125,55 @@ class ModuleMsgFlood : public Module
int nsecs = atoi(secs); int nsecs = atoi(secs);
if ((nlines<1) || (nsecs<1)) if ((nlines<1) || (nsecs<1))
{ {
WriteServ(user->fd,"608 %s %s :Invalid flood parameter",user->nick,c->name); WriteServ(source->fd,"608 %s %s :Invalid flood parameter",source->nick,channel->name);
return 0; parameter = "";
return MODEACTION_DENY;
} }
else else
{ {
if (!c->GetExt("flood")) if (!channel->GetExt("flood"))
{ {
floodsettings *f = new floodsettings(ban,nsecs,nlines); floodsettings *f = new floodsettings(ban,nsecs,nlines);
c->Extend("flood",(char*)f); channel->Extend("flood",(char*)f);
return MODEACTION_ALLOW;
} }
} }
return 1;
} }
else else
{ {
WriteServ(user->fd,"608 %s %s :Invalid flood parameter",user->nick,c->name); WriteServ(source->fd,"608 %s %s :Invalid flood parameter",source->nick,channel->name);
return 0; parameter = "";
return MODEACTION_DENY;
}
}
else
{
if (channel->GetExt("flood"))
{
floodsettings *f = (floodsettings*)channel->GetExt("flood");
DELETE(f);
channel->Shrink("flood");
return MODEACTION_ALLOW;
}
} }
return MODEACTION_DENY;
} }
else };
class ModuleMsgFlood : public Module
{ {
chanrec* c = (chanrec*)target; Server *Srv;
if (c->GetExt("flood")) MsgFlood* mf;
public:
ModuleMsgFlood(Server* Me)
: Module::Module(Me)
{ {
floodsettings *f = (floodsettings*)c->GetExt("flood"); Srv = Me;
DELETE(f); mf = new MsgFlood();
c->Shrink("flood"); Srv->AddMode(mf, 'f');
}
}
return 1;
}
return 0;
} }
void ProcessMessages(userrec* user,chanrec* dest, const std::string &text) void ProcessMessages(userrec* user,chanrec* dest, const std::string &text)
@ -226,7 +230,7 @@ class ModuleMsgFlood : public Module
void Implements(char* List) void Implements(char* List)
{ {
List[I_On005Numeric] = List[I_OnExtendedMode] = List[I_OnChannelDelete] = List[I_OnUserNotice] = List[I_OnUserMessage] = 1; List[I_On005Numeric] = List[I_OnChannelDelete] = List[I_OnUserNotice] = List[I_OnUserMessage] = 1;
} }
virtual void On005Numeric(std::string &output) virtual void On005Numeric(std::string &output)
@ -236,6 +240,7 @@ class ModuleMsgFlood : public Module
virtual ~ModuleMsgFlood() virtual ~ModuleMsgFlood()
{ {
DELETE(mf);
} }
virtual Version GetVersion() virtual Version GetVersion()