mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-19 23:49:01 -04:00
Fixed for new api
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@4221 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
parent
5bfd172ec5
commit
7b4b3f5d11
@ -92,12 +92,78 @@ class joinfloodsettings
|
|||||||
unlocktime = time(NULL) + 60;
|
unlocktime = time(NULL) + 60;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
class JoinFlood : public ModeHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
JoinFlood() : ModeHandler('j', 1, 0, false, MODETYPE_CHANNEL, false) { }
|
||||||
|
|
||||||
|
ModeAction OnModeChange(userrec* source, userrec* dest, chanrec* channel, std::string ¶meter, bool adding)
|
||||||
|
{
|
||||||
|
if (adding)
|
||||||
|
{
|
||||||
|
char ndata[MAXBUF];
|
||||||
|
char* data = ndata;
|
||||||
|
strlcpy(ndata,parameter.c_str(),MAXBUF);
|
||||||
|
char* joins = data;
|
||||||
|
char* secs = NULL;
|
||||||
|
while (*data)
|
||||||
|
{
|
||||||
|
if (*data == ':')
|
||||||
|
{
|
||||||
|
*data = 0;
|
||||||
|
data++;
|
||||||
|
secs = data;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else data++;
|
||||||
|
}
|
||||||
|
if (secs)
|
||||||
|
{
|
||||||
|
/* Set up the flood parameters for this channel */
|
||||||
|
int njoins = atoi(joins);
|
||||||
|
int nsecs = atoi(secs);
|
||||||
|
if ((njoins<1) || (nsecs<1))
|
||||||
|
{
|
||||||
|
WriteServ(source->fd,"608 %s %s :Invalid flood parameter",source->nick,channel->name);
|
||||||
|
parameter = "";
|
||||||
|
return MODEACTION_DENY;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!channel->GetExt("joinflood"))
|
||||||
|
{
|
||||||
|
joinfloodsettings *f = new joinfloodsettings(nsecs,njoins);
|
||||||
|
channel->Extend("joinflood",(char*)f);
|
||||||
|
return MODEACTION_ALLOW;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
WriteServ(source->fd,"608 %s %s :Invalid flood parameter",source->nick,channel->name);
|
||||||
|
return MODEACTION_DENY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (channel->GetExt("joinflood"))
|
||||||
|
{
|
||||||
|
joinfloodsettings *f = (joinfloodsettings*)channel->GetExt("joinflood");
|
||||||
|
DELETE(f);
|
||||||
|
channel->Shrink("joinflood");
|
||||||
|
return MODEACTION_ALLOW;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return MODEACTION_DENY;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class ModuleJoinFlood : public Module
|
class ModuleJoinFlood : public Module
|
||||||
{
|
{
|
||||||
Server *Srv;
|
Server *Srv;
|
||||||
|
JoinFlood* jf;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -105,73 +171,8 @@ class ModuleJoinFlood : public Module
|
|||||||
: Module::Module(Me)
|
: Module::Module(Me)
|
||||||
{
|
{
|
||||||
Srv = Me;
|
Srv = Me;
|
||||||
Srv->AddExtendedMode('j',MT_CHANNEL,false,1,0);
|
jf = new JoinFlood();
|
||||||
}
|
Srv->AddMode(jf, 'j');
|
||||||
|
|
||||||
virtual int OnExtendedMode(userrec* user, void* target, char modechar, int type, bool mode_on, string_list ¶ms)
|
|
||||||
{
|
|
||||||
if ((modechar == 'j') && (type == MT_CHANNEL))
|
|
||||||
{
|
|
||||||
if (mode_on)
|
|
||||||
{
|
|
||||||
std::string FloodParams = params[0];
|
|
||||||
chanrec* c = (chanrec*)target;
|
|
||||||
char ndata[MAXBUF];
|
|
||||||
char* data = ndata;
|
|
||||||
strlcpy(ndata,FloodParams.c_str(),MAXBUF);
|
|
||||||
char* joins = data;
|
|
||||||
char* secs = NULL;
|
|
||||||
while (*data)
|
|
||||||
{
|
|
||||||
if (*data == ':')
|
|
||||||
{
|
|
||||||
*data = 0;
|
|
||||||
data++;
|
|
||||||
secs = data;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else data++;
|
|
||||||
}
|
|
||||||
if (secs)
|
|
||||||
{
|
|
||||||
/* Set up the flood parameters for this channel */
|
|
||||||
int njoins = atoi(joins);
|
|
||||||
int nsecs = atoi(secs);
|
|
||||||
if ((njoins<1) || (nsecs<1))
|
|
||||||
{
|
|
||||||
WriteServ(user->fd,"608 %s %s :Invalid flood parameter",user->nick,c->name);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!c->GetExt("joinflood"))
|
|
||||||
{
|
|
||||||
joinfloodsettings *f = new joinfloodsettings(nsecs,njoins);
|
|
||||||
c->Extend("joinflood",(char*)f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
WriteServ(user->fd,"608 %s %s :Invalid flood parameter",user->nick,c->name);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
chanrec* c = (chanrec*)target;
|
|
||||||
if (c->GetExt("joinflood"))
|
|
||||||
{
|
|
||||||
joinfloodsettings *f = (joinfloodsettings*)c->GetExt("joinflood");
|
|
||||||
DELETE(f);
|
|
||||||
c->Shrink("joinflood");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual int OnUserPreJoin(userrec* user, chanrec* chan, const char* cname)
|
virtual int OnUserPreJoin(userrec* user, chanrec* chan, const char* cname)
|
||||||
@ -218,7 +219,7 @@ class ModuleJoinFlood : public Module
|
|||||||
|
|
||||||
void Implements(char* List)
|
void Implements(char* List)
|
||||||
{
|
{
|
||||||
List[I_On005Numeric] = List[I_OnExtendedMode] = List[I_OnChannelDelete] = List[I_OnUserPreJoin] = List[I_OnUserJoin] = 1;
|
List[I_On005Numeric] = List[I_OnChannelDelete] = List[I_OnUserPreJoin] = List[I_OnUserJoin] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void On005Numeric(std::string &output)
|
virtual void On005Numeric(std::string &output)
|
||||||
@ -228,6 +229,7 @@ class ModuleJoinFlood : public Module
|
|||||||
|
|
||||||
virtual ~ModuleJoinFlood()
|
virtual ~ModuleJoinFlood()
|
||||||
{
|
{
|
||||||
|
DELETE(jf);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual Version GetVersion()
|
virtual Version GetVersion()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user