mirror of
https://github.com/EnergyMech/energymech.git
synced 2025-12-29 16:14:43 +00:00
89 lines
1.9 KiB
C
89 lines
1.9 KiB
C
/*
|
|
|
|
EnergyMech, IRC bot software
|
|
Copyright (c) 2001-2004 proton
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
|
*/
|
|
#define DYNAMODE_C
|
|
#include "config.h"
|
|
|
|
#ifdef DYNAMODE
|
|
|
|
#include "defines.h"
|
|
#include "structs.h"
|
|
#include "global.h"
|
|
#include "h.h"
|
|
|
|
void check_dynamode(Chan *chan)
|
|
{
|
|
ChanUser *cu;
|
|
char tempconf[strlen(chan->setting[STR_DYNLIMIT].str_var)+2];
|
|
char ascnum[11];
|
|
char *src,*num,*end;
|
|
int n = 0,wind,v[3];
|
|
|
|
/*
|
|
* parse `delay:window:minwin'
|
|
*/
|
|
end = Strcpy(tempconf,chan->setting[STR_DYNLIMIT].str_var);
|
|
num = src = tempconf;
|
|
for(;(src<=end) && (n<3);src++)
|
|
{
|
|
if (*src == 0 || *src == ':')
|
|
{
|
|
*src = 0;
|
|
v[n] = a2i(num);
|
|
if (errno)
|
|
{
|
|
v[0] = 90; /* delay */
|
|
v[1] = 10; /* window */
|
|
v[2] = 4; /* minwin */
|
|
break;
|
|
}
|
|
num = src+1;
|
|
n++;
|
|
}
|
|
}
|
|
v[0] = (v[0] < 20) ? 20 : (v[0] > 600) ? 600 : v[0];
|
|
if ((now - chan->lastlimit) < v[0])
|
|
return;
|
|
v[1] = (v[1] < 5) ? 5 : (v[1] > 50) ? 50 : v[1];
|
|
v[2] = (v[2] < 1) ? 1 : (v[2] > 50) ? 50 : v[2];
|
|
|
|
chan->lastlimit = now;
|
|
|
|
n = 0;
|
|
for(cu=chan->users;cu;cu=cu->next)
|
|
n++;
|
|
|
|
wind = n / v[1];
|
|
if (wind < v[2])
|
|
wind = v[2];
|
|
|
|
wind += n;
|
|
|
|
n = wind - chan->limit;
|
|
|
|
if (!chan->limitmode || (n < -2) || (n > 1))
|
|
{
|
|
sprintf(ascnum,"%i",wind);
|
|
send_mode(chan,160,QM_RAWMODE,'+','l',ascnum);
|
|
}
|
|
}
|
|
|
|
#endif /* DYNAMODE */
|