added joinflood scanner
[NeonServV5.git] / src / bot_NeonSpam.h
1 /* bot_NeonSpam.h - NeonServ v5.1
2  * Copyright (C) 2011  Philipp Kreil (pk910)
3  * 
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  * 
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  * 
14  * You should have received a copy of the GNU General Public License 
15  * along with this program. If not, see <http://www.gnu.org/licenses/>. 
16  */
17
18 #ifndef _bot_NeonSpam_h
19 #define _bot_NeonSpam_h
20
21 #include "main.h"
22
23 #define SPAMSETTINGS_SPAMSCAN  0x01
24 #define SPAMSETTINGS_FLOODSCAN 0x02
25 #define SPAMSETTINGS_JOINSCAN  0x04
26 #define SPAMSETTINGS_SCANOPS   0x08
27 #define SPAMSETTINGS_SCANVOICE 0x10
28
29 #define MAX_FLOOD_AMOUNT 300
30 #define MIN_FLOOD_AMOUNT 2
31 #define MAX_FLOOD_TIME   200
32
33 #define MAX_JOIN_AMOUNT 300
34 #define MIN_JOIN_AMOUNT 2
35 #define MAX_JOIN_TIME   200
36
37 struct NeonSpamSettings {
38     unsigned int flags;
39     unsigned char spam_amount;
40     unsigned char flood_amount;
41     unsigned char flood_time;
42     unsigned char join_amount;
43     unsigned char join_time;
44     unsigned int exceptlevel : 10;
45     struct NeonSpamJoinNode *join_nodes;
46 };
47 /* PENALTY SYSTEM
48 * user gets MAX_FLOOD_TIME points per message
49 * points get removed each loop
50 * pounts to be removed each second:
51 *  MAX_FLOOD_TIME/flood_time
52
53 * the floodlimit is reached, if the penalty points 
54 * are bigger than MAX_FLOOD_TIME * flood_amount
55 */
56
57 struct NeonSpamNode {
58     unsigned long lastmsg; //crc32 hash
59     unsigned char spamcount;
60     int floodpenalty;
61     time_t last_penalty_update;
62 };
63
64 struct NeonSpamJoinNode {
65     char *ident;
66     char *host;
67     int joinpenalty;
68     time_t last_penalty_update;
69     struct NeonSpamJoinNode *next;
70 };
71
72 void init_NeonSpam();
73 void loop_NeonSpam();
74 void free_NeonSpam();
75
76 void freeNeonSpamSettings(struct NeonSpamSettings *settings);
77
78 #endif