77fb4eefc07da03771581e14480a60fe7ab85be8
[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       0x0001
24 #define SPAMSETTINGS_FLOODSCAN      0x0002
25 #define SPAMSETTINGS_JOINSCAN       0x0004
26 #define SPAMSETTINGS_SCANOPS        0x0008
27 #define SPAMSETTINGS_SCANVOICE      0x0010
28 #define SPAMSETTINGS_BOTNETSCAN     0x0020
29 #define SPAMSETTINGS_KICKEDBOTQUEUE 0x0040
30
31 #define MAX_FLOOD_AMOUNT 300
32 #define MIN_FLOOD_AMOUNT 2
33 #define MAX_FLOOD_TIME   200
34
35 #define MAX_JOIN_AMOUNT 300
36 #define MIN_JOIN_AMOUNT 2
37 #define MAX_JOIN_TIME   200
38
39 #define BOTNETSCAN_USERS 4
40 #define BOTNETSCAN_TIME 2
41
42 struct NeonSpamSettings {
43     unsigned int flags;
44     unsigned char spam_amount;
45     unsigned char flood_amount;
46     unsigned char flood_time;
47     unsigned char join_amount;
48     unsigned char join_time;
49     unsigned int exceptlevel : 10;
50     
51     //joinflood
52     struct NeonSpamJoinNode *join_nodes;
53     
54     //botnet
55     unsigned long lastmsg; //crc32 hash
56     time_t lastmsg_time;
57     char *botnicks[BOTNETSCAN_USERS];
58     
59     
60 };
61 /* PENALTY SYSTEM
62 * user gets MAX_FLOOD_TIME points per message
63 * points get removed each loop
64 * pounts to be removed each second:
65 *  MAX_FLOOD_TIME/flood_time
66
67 * the floodlimit is reached, if the penalty points 
68 * are bigger than MAX_FLOOD_TIME * flood_amount
69 */
70
71 struct NeonSpamNode {
72     unsigned long lastmsg; //crc32 hash
73     unsigned char spamcount;
74     int floodpenalty;
75     time_t last_penalty_update;
76 };
77
78 struct NeonSpamJoinNode {
79     char *ident;
80     char *host;
81     int joinpenalty;
82     time_t last_penalty_update;
83     struct NeonSpamJoinNode *next;
84 };
85
86 void init_NeonSpam();
87 void loop_NeonSpam();
88 void free_NeonSpam();
89
90 void freeNeonSpamSettings(struct NeonSpamSettings *settings);
91
92 #endif