-/* bot_NeonSpam.h - NeonServ v5.1
- * Copyright (C) 2011 Philipp Kreil (pk910)
+/* bot_NeonSpam.h - NeonServ v5.3
+ * Copyright (C) 2011-2012 Philipp Kreil (pk910)
*
* 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
#include "main.h"
-#define SPAMSETTINGS_SPAMSCAN 0x01
-#define SPAMSETTINGS_FLOODSCAN 0x02
-#define SPAMSETTINGS_JOINSCAN 0x04
-#define SPAMSETTINGS_SCANOPS 0x08
-#define SPAMSETTINGS_SCANVOICE 0x10
+struct ChanNode;
+
+//SPAMSCAN
+#define SPAMSETTINGS_SPAMSCAN 0x000001
+#define SPAMSETTINGS_SPAMSCAN_OPS 0x000002
+#define SPAMSETTINGS_SPAMSCAN_VOICE 0x000004
+#define SPAMSETTINGS_SPAMCHARS "abc"
+#define SPAMSETTINGS_SPAMEXCINDEX 0
+
+//FLOODSCAN
+#define SPAMSETTINGS_FLOODSCAN 0x000008
+#define SPAMSETTINGS_FLOODSCAN_OPS 0x000010
+#define SPAMSETTINGS_FLOODSCAN_VOICE 0x000020
+#define SPAMSETTINGS_FLOODCHARS "def"
+#define SPAMSETTINGS_FLOODEXCINDEX 1
+#define SPAMSETTINGS_FLOODSENINDEX 0
+
+//JOINSCAN
+#define SPAMSETTINGS_JOINSCAN 0x000040
+#define SPAMSETTINGS_JOINSCAN_OPS 0x000080
+#define SPAMSETTINGS_JOINSCAN_VOICE 0x000100
+#define SPAMSETTINGS_JOINCHARS "ghi"
+#define SPAMSETTINGS_JOINEXCINDEX 2
+#define SPAMSETTINGS_JOINSENINDEX 1
+
+//BOTNET SCAN
+#define SPAMSETTINGS_BOTNETSCAN 0x000200
+#define SPAMSETTINGS_BOTNETSCAN_OPS 0x000400
+#define SPAMSETTINGS_BOTNETSCAN_VOICE 0x000800
+#define SPAMSETTINGS_BOTNETSCAN_STRIPCC 0x001000
+#define SPAMSETTINGS_BOTNETCHARS "jklm"
+#define SPAMSETTINGS_BOTNETEXCINDEX 3
+
+//CAPSSCAN
+#define SPAMSETTINGS_CAPSSCAN 0x002000
+#define SPAMSETTINGS_CAPSSCAN_OPS 0x004000
+#define SPAMSETTINGS_CAPSSCAN_VOICE 0x008000
+#define SPAMSETTINGS_CAPSCHARS "nop"
+#define SPAMSETTINGS_CAPSEXCINDEX 4
+#define SPAMSETTINGS_CAPSPERCENTINDEX 0
+
+//DIGITSCAN
+#define SPAMSETTINGS_DIGITSCAN 0x010000
+#define SPAMSETTINGS_DIGITSCAN_OPS 0x020000
+#define SPAMSETTINGS_DIGITSCAN_VOICE 0x040000
+#define SPAMSETTINGS_DIGITCHARS "qrs"
+#define SPAMSETTINGS_DIGITEXCINDEX 5
+#define SPAMSETTINGS_DIGITPERCENTINDEX 1
+
+
+#define SPAMSETTINGS_CHARS SPAMSETTINGS_SPAMCHARS SPAMSETTINGS_FLOODCHARS SPAMSETTINGS_JOINCHARS SPAMSETTINGS_BOTNETCHARS SPAMSETTINGS_CAPSCHARS SPAMSETTINGS_DIGITCHARS
+#define SPAMSETTINGS_FLAGS 0x07ffff /* all flags that can be stored in the database */
+#define SPAMSETTINGS_EXCEPTINDEXES 6
+#define SPAMSETTINGS_SENSIBILITYINDEXES 2
+#define SPAMSETTINGS_PERCENTINDEXES 2
+
+//SCRIPT FLAGS
+#define SPAMSETTINGS_KICKEDBOTQUEUE 0x080000
+#define SPAMSETTINGS_ISTIMEBAN 0x100000
+#define SPAMSETTINGS_SETTIMEBAN 0x200000
+
+#define MAX_FLOOD_AMOUNT 300
+#define MIN_FLOOD_AMOUNT 2
+#define MAX_FLOOD_TIME 200
+
+#define MAX_JOIN_AMOUNT 300
+#define MIN_JOIN_AMOUNT 2
+#define MAX_JOIN_TIME 200
+
+#define BOTNETSCAN_USERS 4
+#define BOTNETSCAN_TIME 2
struct NeonSpamSettings {
unsigned int flags;
unsigned char spam_amount;
- unsigned char spam_time;
- unsigned char flood_amount;
- unsigned char flood_time;
+ unsigned char sensibility_amount[SPAMSETTINGS_SENSIBILITYINDEXES];
+ unsigned char sensibility_time[SPAMSETTINGS_SENSIBILITYINDEXES];
+ unsigned int exceptlevel[SPAMSETTINGS_EXCEPTINDEXES];
+ unsigned char percent[SPAMSETTINGS_PERCENTINDEXES];
+
+ //joinflood
+ struct NeonSpamJoinNode *join_nodes;
+
+ //botnet
+ unsigned long lastmsg; //crc32 hash
+ time_t lastmsg_time;
+ char *botnicks[BOTNETSCAN_USERS];
+
};
+/* PENALTY SYSTEM
+* user gets MAX_FLOOD_TIME points per message
+* points get removed each loop
+* pounts to be removed each second:
+* MAX_FLOOD_TIME/flood_time
+*
+* the floodlimit is reached, if the penalty points
+* are bigger than MAX_FLOOD_TIME * flood_amount
+*/
+
+#define NEONSPAMNODE_FLAG_CAPSSCAN_WARNED 0x01
+#define NEONSPAMNODE_FLAG_DIGITSCAN_WARNED 0x02
struct NeonSpamNode {
- unsigned int flags;
+ unsigned long lastmsg; //crc32 hash
+ unsigned char spamcount;
+ int floodpenalty;
+ time_t last_penalty_update;
+ unsigned char flags;
+};
+
+struct NeonSpamJoinNode {
+ char *ident;
+ char *host;
+ int joinpenalty;
+ time_t last_penalty_update;
+ struct NeonSpamJoinNode *next;
};
void init_NeonSpam();
void loop_NeonSpam();
void free_NeonSpam();
+void freeNeonSpamSettings(struct NeonSpamSettings *settings);
+char* convertNeonSpamSettingsToString(unsigned int flags, char *buffer);
+int loadNeonSpamSettings(struct ChanNode *chan);
+
#endif
\ No newline at end of file