simplified modcmd system
[NeonServV5.git] / src / bot_NeonSpam.c
index 911c9b8cad4cac7f0cffdf836a18b4da0bd81be0..f1fe00ca8670bea6057781366998a174581f8b5b 100644 (file)
@@ -1,4 +1,4 @@
-/* bot_NeonSpam.c - NeonServ v5.1
+/* bot_NeonSpam.c - NeonServ v5.2
  * Copyright (C) 2011  Philipp Kreil (pk910)
  * 
  * This program is free software: you can redistribute it and/or modify
 #define BOTID 2
 
 static const struct default_language_entry msgtab[] = {
+    {"SS_SET_PERCENT", "%u is an invalid percent value (valid: 0-100)"},
+    {"SS_SET_SENSIBILITY", "%s is an invalid sensibility format. (valid: amount:time   e.g. 5:10)"},
+    {"SS_SET_SENSIBILITY_AMOUNT", "%d is an invalid amount value. (valid: %d-%d)"},
+    {"SS_SET_SENSIBILITY_TIME", "%d is an invalid time value. (valid: %d-%d)"},
+    {"SS_SET_SPAMLIMIT", "%d is an invalid spamlimit value. (valid: %d-%d)"},
+    {"SS_SET_OPTION_SpamReaction_0", "Kick"},
+    {"SS_SET_OPTION_SpamReaction_1", "KickBan"},
+    {"SS_SET_OPTION_SpamReaction_2", "Timed Ban"},
+    {"SS_SET_OPTION_FloodReaction_0", "Kick"},
+    {"SS_SET_OPTION_FloodReaction_1", "KickBan"},
+    {"SS_SET_OPTION_FloodReaction_2", "Timed Ban"},
+    {"SS_SET_OPTION_JoinReaction_0", "Kick"},
+    {"SS_SET_OPTION_JoinReaction_1", "KickBan"},
+    {"SS_SET_OPTION_JoinReaction_2", "Timed Ban"},
+    {"SS_SET_OPTION_CapsReaction_0", "Kick"},
+    {"SS_SET_OPTION_CapsReaction_1", "KickBan"},
+    {"SS_SET_OPTION_CapsReaction_2", "Timed Ban"},
+    {"SS_SET_OPTION_DigitReaction_0", "Kick"},
+    {"SS_SET_OPTION_DigitReaction_1", "KickBan"},
+    {"SS_SET_OPTION_DigitReaction_2", "Timed Ban"},
     {NULL, NULL}
 };
 
@@ -61,6 +81,8 @@ static struct NeonSpamJoinNode *getNeonSpamJoinNode(struct ChanUser *chanuser);
 #define SPAMSERV_MSG_JOINFLOOD  "Join flooding the channel"
 #define SPAMSERV_MSG_WARNING    "%s is against the channel rules"
 #define SPAMSERV_MSG_BOTNET     "BotNet detected."
+#define SPAMSERV_MSG_CAPS       "Using too many chars in UPPER CASE"
+#define SPAMSERV_MSG_DIGIT      "Using too many numeric chars"
 
 //EVENTS
 #include "event_neonspam_join.c"
@@ -100,36 +122,38 @@ static void start_bots() {
     MYSQL_RES *res, *res2;
     MYSQL_ROW row;
     
-    printf_mysql_query("SELECT `nick`, `ident`, `realname`, `server`, `port`, `pass`, `textbot`, `id` FROM `bots` WHERE `botclass` = '%d' AND `active` = '1'", BOTID);
+    printf_mysql_query("SELECT `nick`, `ident`, `realname`, `server`, `port`, `pass`, `textbot`, `id`, `queue` FROM `bots` WHERE `botclass` = '%d' AND `active` = '1'", BOTID);
     res = mysql_use();
     
     while ((row = mysql_fetch_row(res)) != NULL) {
-        
         user = addUser(row[0]);
         strcpy(user->ident, row[1]);
         strcpy(user->realname, row[2]);
         user->flags |= USERFLAG_ISBOT;
         client = create_socket(row[3], atoi(row[4]), row[5], user);
         client->flags |= (strcmp(row[6], "0") ? SOCKET_FLAG_PREFERRED : 0);
+        client->flags |= (strcmp(row[8], "0") ? SOCKET_FLAG_USE_QUEUE : 0);
         client->botid = BOTID;
         client->clientid = atoi(row[7]);
         connect_socket(client);
-        printf_mysql_query("SELECT `command`, `function`, `parameters`, `global_access`, `chan_access` FROM `bot_binds` WHERE `botclass` = '%d'", client->botid);
-        res2 = mysql_use();
-        while ((row = mysql_fetch_row(res2)) != NULL) {
-            if(bind_cmd_to_command(BOTID, row[0], row[1])) {
-                if(row[2] && strcmp(row[2], "")) {
-                    bind_set_parameters(BOTID, row[0], row[2]);
-                }
-                if(row[3]) {
-                    bind_set_global_access(BOTID, row[0], atoi(row[3]));
-                }
-                if(row[4]) {
-                    bind_set_channel_access(BOTID, row[0], row[4]);
-                }
+    }
+    
+    printf_mysql_query("SELECT `command`, `function`, `parameters`, `global_access`, `chan_access` FROM `bot_binds` WHERE `botclass` = '%d'", BOTID);
+    res2 = mysql_use();
+    while ((row = mysql_fetch_row(res2)) != NULL) {
+        if(bind_cmd_to_command(BOTID, row[0], row[1])) {
+            if(row[2] && strcmp(row[2], "")) {
+                bind_set_parameters(BOTID, row[0], row[2]);
+            }
+            if(row[3]) {
+                bind_set_global_access(BOTID, row[0], atoi(row[3]));
+            }
+            if(row[4]) {
+                bind_set_channel_access(BOTID, row[0], row[4]);
             }
         }
     }
+    bind_unbound_required_functions(BOTID);
 }
 
 char* convertNeonSpamSettingsToString(unsigned int flags, char *buffer) {
@@ -155,6 +179,7 @@ static unsigned int convertNeonSpamSettingsToFlags(char *str) {
             if(*str == chars[j]) {
                 flags |= i;
                 j++;
+                i = i << 1;
                 break;
             }
             j++;
@@ -266,28 +291,6 @@ static void createSpamNode(struct ChanUser *chanuser) {
 
 void init_NeonSpam() {
     
-    #define USER_COMMAND(NAME,FUNCTION,PARAMCOUNT,PRIVS,FLAGS) register_command(BOTID, NAME, FUNCTION, PARAMCOUNT, PRIVS, 0, FLAGS)
-    //               NAME              FUNCTION        PARAMS     PRIVS                FLAGS
-    USER_COMMAND("netinfo",      neonserv_cmd_netinfo,   0, NULL,                   0);
-    USER_COMMAND("version",      neonserv_cmd_version,   0, NULL,                   0);
-    USER_COMMAND("set",          neonspam_cmd_set,       0, "#channel_setters",     CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
-    #undef USER_COMMAND
-    
-    #define OPER_COMMAND(NAME,FUNCTION,PARAMCOUNT,GACCESS,FLAGS) register_command(BOTID, NAME, FUNCTION, PARAMCOUNT, NULL, GACCESS, FLAGS)
-    //            NAME            FUNCTION              PARAMS  ACCS  FLAGS
-    OPER_COMMAND("register",     neonserv_cmd_register,  1,     200,  CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
-    OPER_COMMAND("unregister",   neonserv_cmd_unregister,1,     200,  CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
-    OPER_COMMAND("bind",         neonserv_cmd_bind,      2,     900,  CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
-    OPER_COMMAND("unbind",       neonserv_cmd_unbind,    1,     900,  CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
-    OPER_COMMAND("csuspend",     neonserv_cmd_csuspend,  1,     100,  CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
-    OPER_COMMAND("cunsuspend",   neonserv_cmd_cunsuspend,1,     100,  CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
-    OPER_COMMAND("say",          neonserv_cmd_say,       2,     600,  CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
-    OPER_COMMAND("emote",        neonserv_cmd_emote,     2,     600,  CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
-    OPER_COMMAND("notice",       neonserv_cmd_notice,    2,     600,  CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_CHAN_PARAM | CMDFLAG_OPLOG);
-    OPER_COMMAND("raw",          neonserv_cmd_raw,       1,     800,  CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
-    OPER_COMMAND("god",          neonserv_cmd_god,       0,     1,    CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_OPLOG);
-    #undef OPER_COMMAND
-    
     start_bots();
     
     //register events