MODE_NOFLOOD (+f [!][+@]<count>:<time>) added (prevents users from flooding the channel)
[ircu2.10.12-pk.git] / include / channel.h
index 6984250e62ea1dd9143d7df2abeaf3843b151dae..dcd93ea394973394aeca24d1a99aac9a4c4c9aaf 100644 (file)
@@ -130,14 +130,15 @@ typedef signed long long long64;
 #define MODE_ADD         0x40000000
 #define MODE_ACCESS     0x100000000LLU /**< ChanServ access */
 #define MODE_AUDITORIUM 0x200000000LLU /**< +u Auditorium */
+#define MODE_NOFLOOD    0x400000000LLU /**< +f NoFlood */
 /** mode flags which take another parameter (With PARAmeterS)
  */
-#define MODE_WPARAS     (MODE_CHANOP|MODE_VOICE|MODE_BAN|MODE_KEY|MODE_LIMIT|MODE_APASS|MODE_UPASS|MODE_EXCEPTION|MODE_ALTCHAN|MODE_ACCESS)
+#define MODE_WPARAS     (MODE_CHANOP|MODE_VOICE|MODE_BAN|MODE_KEY|MODE_LIMIT|MODE_APASS|MODE_UPASS|MODE_EXCEPTION|MODE_ALTCHAN|MODE_ACCESS|MODE_NOFLOOD)
 
 /** Available Channel modes */
 #define infochanmodes feature_bool(FEAT_OPLEVELS) ? "AcCbiklmMnNopstuUvrDRzQu" : "cCbiklmMnNopstuvrDRzQu"
 /** Available Channel modes that take parameters */
-#define infochanmodeswithparams feature_bool(FEAT_OPLEVELS) ? "AbkloUvFa" : "bklovFa"
+#define infochanmodeswithparams feature_bool(FEAT_OPLEVELS) ? "AbfkloUvFa" : "bfklovFa"
 
 #define HoldChannel(x)          (!(x))
 /** name invisible */
@@ -205,10 +206,20 @@ struct Membership {
   struct Membership* prev_member;      /**< The previous user on this channel*/
   struct Membership* next_channel;     /**< Next channel this user is on */
   struct Membership* prev_channel;     /**< Previous channel this user is on*/
+  struct MemberFlood* flood;        /**< count's how many times a user sent something (+f floodcontrol) */
   unsigned int       status;           /**< Flags for op'd, voice'd, etc */
   unsigned short     oplevel;          /**< Op level */
 };
 
+#define FLFL_CHANOP  0x01
+#define FLFL_VOICE   0x02
+#define FLFL_NOFLOOD  0x04
+
+struct MemberFlood {
+  struct MemberFlood* next_memberflood;
+  time_t time;
+};
+
 #define MAXOPLEVELDIGITS    3
 #define MAXOPLEVEL          999
 
@@ -251,6 +262,8 @@ struct Mode {
   ulong64 mode;
   unsigned int limit;
   unsigned int access;
+  char noflood[11]; //max [@+]999:9999
+  unsigned int noflood_value; //3bit for @+, 10bit  first field,  14bit second field  = 27bit of 32bit
   char key[KEYLEN + 1];
   char upass[KEYLEN + 1];
   char apass[KEYLEN + 1];
@@ -469,5 +482,6 @@ extern int apply_ban(struct Ban **banlist, struct Ban *newban, int free);
 extern void free_ban(struct Ban *ban);
 extern signed int destruct_nonpers_channel(struct Channel *chptr);
 extern int ext_amsg_block(struct Client *cptr, struct Channel *chptr, const char *msg);
+extern int ext_noflood_block(struct Client *cptr, struct Channel *chptr);
 
 #endif /* INCLUDED_channel_h */