added BlockInvite uset setting to block invites globally
authorpk910 <philipp@zoelle1.de>
Sat, 19 May 2012 02:30:11 +0000 (04:30 +0200)
committerpk910 <philipp@zoelle1.de>
Sat, 19 May 2012 02:30:11 +0000 (04:30 +0200)
Request: http://bugtrack.pk910.de/view.php?id=61

database.sql
database.upgrade.sql
src/modules/NeonServ.mod/bot_NeonServ.c
src/modules/NeonServ.mod/cmd_neonserv_invite.c
src/modules/NeonServ.mod/cmd_neonserv_uset.c
src/mysqlConn.c

index d913d55e36c782340ef10f77194970a7464832ab..bb4ea6bb7dfbe5d5f20c319387a54b12fc26d771 100644 (file)
@@ -322,6 +322,7 @@ CREATE TABLE IF NOT EXISTS `users` (
   `user_god` tinyint(1) NOT NULL,
   `user_lang` varchar(6) NOT NULL,
   `user_reply_privmsg` tinyint(1) NOT NULL,
+  `user_block_invites` tinyint(1) NOT NULL,
   `user_registered` INT(20) NOT NULL,
   `user_lastcheck` INT(20) NOT NULL,
   PRIMARY KEY (`user_id`),
index 437b5f7d6e119788f4703e233402e4f0d5ea5e80..b7c9ac115b3e645779b9aa6556668cc6c46a20b2 100644 (file)
@@ -178,3 +178,7 @@ ALTER TABLE `bots` ADD `oper_user` VARCHAR( 50 ) NULL AFTER `automodes` ,
 ADD `oper_pass` VARCHAR( 50 ) NULL AFTER `oper_user`;
 
 -- version: 18
+
+ALTER TABLE `users` ADD `user_block_invites` TINYINT NOT NULL AFTER `user_reply_privmsg`;
+
+-- version: 19
index 5b13de0788cfc7e2e5c1c7941147caaca2c7f879..83f329b3506544a7be71dfdc9525e4def2d510b2 100644 (file)
@@ -269,6 +269,7 @@ static const struct default_language_entry msgtab[] = {
     {"NS_UNBANALL_FAIL", "$b%s$b could not find any bans in %s."}, /* {ARGS: "NeonServ", "#TestChan"} */
     {"NS_UNBANME_DONE", "removed $b%d$b masks from the %s ban list."}, /* {ARGS: 5, "#TestChan"} */
     {"NS_UNBANME_FAIL", "$b%s$b could not find any bans matching %s."}, /* {ARGS: "NeonServ", "TestUser!TestIdent@TestUser.user.WebGamesNet"} */
+    {"NS_INVITE_GLOBALLY_BLOCKED", "$b%s$b doesn't want to be invited at all."}, /* {ARGS: "TestUser"} */
     {"NS_INVITE_RESTRICTION", "%s doesn't want to be invited to %s."}, /* {ARGS: "TestUser", "#TestChan"} */
     {"NS_INVITE_TIMEOUT", "%s has already been invited to $b%s$b."}, /* {ARGS: "TestUser", "#TestChan"} */
     {"NS_INVITE_ON_CHAN", "%s is already in $b%s$b."}, /* {ARGS: "TestUser", "#TestChan"} */
index 70a405cea7fb91038b0fdbe33bdf32d46e6022fc..d241ff77d9b191e8a7199da7520ed6fa966740cd 100644 (file)
@@ -100,9 +100,14 @@ static void neonserv_cmd_invite_async1(struct ClientSocket *client, struct Clien
     if(auth) {
         MYSQL_RES *res;
         MYSQL_ROW row;
-        printf_mysql_query("SELECT `user_id` FROM `users` WHERE `user_user` = '%s'", escape_string(auth));
+        printf_mysql_query("SELECT `user_id`, `user_block_invites` FROM `users` WHERE `user_user` = '%s'", escape_string(auth));
         res = mysql_use();
         if ((row = mysql_fetch_row(res)) != NULL) {
+            //check if the user has blocked invites globally
+            if(!strcmp(row[1], "1")) {
+                reply(textclient, user, "NS_INVITE_GLOBALLY_BLOCKED", nick);
+                return;
+            }
             //check if the user has set noinvite
             printf_mysql_query("SELECT `id` FROM `noinvite` WHERE `uid` = '%s' AND `cid` = '%d'", row[0], chan->channel_id);
             res = mysql_use();
index c9c7b5fe3f9dc0d29925a2f7da7fc211853deecc..822cd5ec0fd6e04e8658e2bc83c853fb683ea8c6 100644 (file)
@@ -19,6 +19,7 @@
 
 typedef void neonserv_cmd_uset_function(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument, MYSQL_ROW defaults);
 static void neonserv_cmd_uset_language(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument, MYSQL_ROW defaults);
+static void neonserv_cmd_uset_blockinvite(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument, MYSQL_ROW defaults);
 static void neonserv_cmd_uset_noinvite(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument, MYSQL_ROW defaults);
 static void neonserv_cmd_uset_autoinvite(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument, MYSQL_ROW defaults);
 static void neonserv_cmd_uset_noautoop(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument, MYSQL_ROW defaults);
@@ -38,12 +39,15 @@ static const struct {
     neonserv_cmd_uset_function *function;
     int flags;
 } uset_settings[] = {
-    {"Language",    neonserv_cmd_uset_language,   USET_FLAG_GLOBAL},
-    {"NoInvite",    neonserv_cmd_uset_noinvite,   USET_FLAG_CHANNEL},
-    {"AutoInvite",  neonserv_cmd_uset_autoinvite, USET_FLAG_CHANNEL | USET_FLAG_DEFAULTS},
-    {"NoAutoOp",    neonserv_cmd_uset_noautoop,   USET_FLAG_CHANNEL | USET_FLAG_DEFAULTS},
-    {"NoAutoVoice", neonserv_cmd_uset_noautoop,   USET_FLAG_CHANNEL | USET_FLAG_DEFAULTS | USET_FLAG_INVISIBLE}, //alias of NoAutoOp
-    {"Info",        neonserv_cmd_uset_info,       USET_FLAG_CHANNEL | USET_FLAG_DEFAULTS},
+    {"Language",        neonserv_cmd_uset_language,    USET_FLAG_GLOBAL},
+    {"BlockInvites",    neonserv_cmd_uset_blockinvite, USET_FLAG_GLOBAL},
+    {"BlockInvite",     neonserv_cmd_uset_blockinvite, USET_FLAG_GLOBAL | USET_FLAG_INVISIBLE},
+    {"BlockAllInvites", neonserv_cmd_uset_blockinvite, USET_FLAG_GLOBAL | USET_FLAG_INVISIBLE},
+    {"NoInvite",        neonserv_cmd_uset_noinvite,    USET_FLAG_CHANNEL},
+    {"AutoInvite",      neonserv_cmd_uset_autoinvite,  USET_FLAG_CHANNEL | USET_FLAG_DEFAULTS},
+    {"NoAutoOp",        neonserv_cmd_uset_noautoop,    USET_FLAG_CHANNEL | USET_FLAG_DEFAULTS},
+    {"NoAutoVoice",     neonserv_cmd_uset_noautoop,    USET_FLAG_CHANNEL | USET_FLAG_DEFAULTS | USET_FLAG_INVISIBLE}, //alias of NoAutoOp
+    {"Info",            neonserv_cmd_uset_info,        USET_FLAG_CHANNEL | USET_FLAG_DEFAULTS},
     {NULL, NULL, 0}
 };
 
@@ -144,7 +148,7 @@ static void neonserv_cmd_uset_language(struct ClientSocket *client, struct UserN
         }
     } else
         lang = user->language;
-    reply(getTextBot(), user, "\002Language   \002%s", lang->langname);
+    reply(getTextBot(), user, "\002Language    \002%s", lang->langname);
     char tmp[MAXLEN];
     int tmppos = 0;
     lang = get_default_language();
@@ -157,6 +161,28 @@ static void neonserv_cmd_uset_language(struct ClientSocket *client, struct UserN
     reply(getTextBot(), user, "  %s", tmp);
 }
 
+static void neonserv_cmd_uset_blockinvite(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument, MYSQL_ROW defaults) {
+    MYSQL_RES *res;
+    MYSQL_ROW row;
+    printf_mysql_query("SELECT `user_id`, `user_block_invites` FROM `users` WHERE `user_user` = '%s'", escape_string(user->auth));
+    res = mysql_use();
+    row = mysql_fetch_row(res);
+    int blockinvite = (row ? atoi(row[1]) : 0);
+    if(argument) {
+        if(!strcmp(argument, "0") || !stricmp(argument, "off") || !stricmp(argument, get_language_string(user, "NS_SET_OFF"))) {
+            blockinvite = 0;
+        } else if(!strcmp(argument, "1") || !stricmp(argument, "on") || !stricmp(argument, get_language_string(user, "NS_SET_ON"))) {
+            blockinvite = 1;
+        }
+        if(blockinvite && !row) {
+            printf_mysql_query("INSERT INTO `users` (`user_user`, `user_block_invites`) VALUES ('%s', '1')", escape_string(user->auth));
+        } else if(blockinvite != atoi(row[1])) {
+            printf_mysql_query("UPDATE `users` SET `user_block_invites` = '%d' WHERE `user_id` = '%s'", blockinvite, row[0]);
+        }
+    }
+    reply(getTextBot(), user, "\002BlockInvite \002%s", (blockinvite ? get_language_string(user, "NS_SET_ON") : get_language_string(user, "NS_SET_OFF")));
+}
+
 static void neonserv_cmd_uset_noinvite(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument, MYSQL_ROW defaults) {
     MYSQL_RES *res;
     MYSQL_ROW row;
@@ -186,7 +212,7 @@ static void neonserv_cmd_uset_noinvite(struct ClientSocket *client, struct UserN
             }
         }
     }
-    reply(getTextBot(), user, "\002NoInvite   \002%s", (noinvite ? get_language_string(user, "NS_SET_ON") : get_language_string(user, "NS_SET_OFF")));
+    reply(getTextBot(), user, "\002NoInvite    \002%s", (noinvite ? get_language_string(user, "NS_SET_ON") : get_language_string(user, "NS_SET_OFF")));
 }
 
 static void neonserv_cmd_uset_autoinvite(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument, MYSQL_ROW defaults) {
@@ -210,9 +236,9 @@ static void neonserv_cmd_uset_autoinvite(struct ClientSocket *client, struct Use
         }
     }
     if(getInvite)
-        reply(getTextBot(), user, "\002AutoInvite \002%s", ((flags & DB_CHANUSER_AUTOINVITE) ? get_language_string(user, "NS_SET_ON") : get_language_string(user, "NS_SET_OFF")));
+        reply(getTextBot(), user, "\002AutoInvite  \002%s", ((flags & DB_CHANUSER_AUTOINVITE) ? get_language_string(user, "NS_SET_ON") : get_language_string(user, "NS_SET_OFF")));
     else
-        reply(getTextBot(), user, "\002AutoInvite \002%s", get_language_string(user, "NS_USET_NO_ACCESS"));
+        reply(getTextBot(), user, "\002AutoInvite  \002%s", get_language_string(user, "NS_USET_NO_ACCESS"));
 }
 
 static void neonserv_cmd_uset_noautoop(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument, MYSQL_ROW defaults) {
@@ -230,7 +256,7 @@ static void neonserv_cmd_uset_noautoop(struct ClientSocket *client, struct UserN
             }
         }
     }
-    reply(getTextBot(), user, "\002NoAutoOp   \002%s", ((flags & DB_CHANUSER_NOAUTOOP) ? get_language_string(user, "NS_SET_ON") : get_language_string(user, "NS_SET_OFF")));
+    reply(getTextBot(), user, "\002NoAutoOp    \002%s", ((flags & DB_CHANUSER_NOAUTOOP) ? get_language_string(user, "NS_SET_ON") : get_language_string(user, "NS_SET_OFF")));
 }
 
 static void neonserv_cmd_uset_info(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument, MYSQL_ROW defaults) {
@@ -242,5 +268,5 @@ static void neonserv_cmd_uset_info(struct ClientSocket *client, struct UserNode
         printf_mysql_query("UPDATE `chanusers` SET `chanuser_infoline` = '%s' WHERE `chanuser_id` = '%s'", escape_string(infoline), defaults[4]);
     } else
         infoline = defaults[1];
-    reply(getTextBot(), user, "\002Info       \002%s", infoline);
+    reply(getTextBot(), user, "\002Info        \002%s", infoline);
 }
index d8e3066599d3b3eef719e5ff142d3ac3b52d6915..f8a65bbb3507cf41e5ce2682a849cfead365134c 100644 (file)
@@ -16,7 +16,7 @@
  */
 
 #include "mysqlConn.h"
-#define DATABASE_VERSION "18"
+#define DATABASE_VERSION "19"
 
 static void show_mysql_error();