- Srv = Me;
- Srv->AddExtendedMode('j',MT_CHANNEL,false,1,0);
- }
-
- 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(njoins,nsecs);
- 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;