added cmd_mdeluser
authorpk910 <philipp@zoelle1.de>
Tue, 23 Aug 2011 23:56:37 +0000 (01:56 +0200)
committerpk910 <philipp@zoelle1.de>
Tue, 23 Aug 2011 23:58:09 +0000 (01:58 +0200)
bot_NeonServ.c
cmd_neonserv_mdeluser.c [new file with mode: 0644]

index 94ca07089d1f89655accb3e1ccb2e6066863d608..a9d453532757b89a616e1d387d3c284f5885c005 100644 (file)
@@ -32,7 +32,9 @@ static const struct default_language_entry msgtab[] = {
     {"NS_ACCESS_OUTRANKED", "You cannot give users access greater than or equal to your own."},
     {"NS_USER_OUTRANKED", "\002%s\002 outranks you (command has no effect)."},
     {"NS_ACCESS_DENIED", "Access denied."},
+    {"NS_NO_ACCESS", "You lack sufficient access to use this command."},
     {"NS_TABLE_NONE", "   None"},
+    {"NS_INVALID_ACCESS_RANGE", "Invalid access range; minimum (%d) must be lower than maximum (%d)."},
     {"NS_CLVL_DONE", "%s now has access \002%d\002 in %s."},
     {"NS_A_LACKS_ACCESS_BUT_GOD_NICK", "%s lacks access to %s but has \002security override\002 enabled."},
     {"NS_A_LACKS_ACCESS_BUT_GOD_AUTH", "%s (%s) lacks access to %s but has \002security override\002 enabled."},
@@ -73,6 +75,7 @@ static const struct default_language_entry msgtab[] = {
     {"NS_UP_ALREADY_OP", "You are already opped in \002%s\002."},
     {"NS_UP_ALREADY_VOICE", "You are already voiced in \002%s\002."},
     {"NS_DOWN_ALREADY", "You are not opped or voiced in \002%s\002."},
+    {"NS_MDELUSER_DONE", "Deleted \002%d\002 account(s) matching \002%s\002 with access from \002%d\002 to \002%d\002 from the %s user list."},
     {NULL, NULL}
 };
 
@@ -86,7 +89,7 @@ INCLUDE ALL CMD's HERE
 #include "cmd_neonserv_clvl.c"
 #include "cmd_neonserv_deluser.c"
 #include "cmd_neonserv_delme.c"
-//#include "cmd_neonserv_mdeluser.c"
+#include "cmd_neonserv_mdeluser.c"
 //#include "cmd_neonserv_trim.c"
 //#include "cmd_neonserv_giveownership.c"
 #include "cmd_neonserv_users.c"
@@ -235,6 +238,7 @@ void init_NeonServ() {
     register_command(BOTID, "down",         neonserv_cmd_down,      0, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN);
     register_command(BOTID, "upall",        neonserv_cmd_upall,     0, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
     register_command(BOTID, "downall",      neonserv_cmd_downall,   0, 0);
+    register_command(BOTID, "mdeluser",     neonserv_cmd_mdeluser,  2, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
     
     start_bots();
     bind_bot_ready(neonserv_bot_ready);
diff --git a/cmd_neonserv_mdeluser.c b/cmd_neonserv_mdeluser.c
new file mode 100644 (file)
index 0000000..ed83079
--- /dev/null
@@ -0,0 +1,45 @@
+
+/*
+* argv[0]  access (format: minaccess-maxaccess)
+* argv[1]  pattern
+*/
+
+static CMD_BIND(neonserv_cmd_mdeluser) {
+    check_mysql();
+    if(!checkChannelAccess(user, chan, "channel_candel", 1, 0)) {
+        reply(getTextBot(), user, "NS_ACCESS_DENIED");
+        return;
+    }
+    int min_access, max_access;
+    char *seperator = strstr(argv[0], "-");
+    if(seperator) {
+        seperator = '\0';
+        seperator++;
+        min_access = atoi(argv[0]);
+        max_access = atoi(seperator);
+        if(max_access > min_access) {
+            reply(getTextBot(), user, "NS_INVALID_ACCESS_RANGE", min_access, max_access);
+            return;
+        }
+    } else {
+        min_access = atoi(argv[0]);
+        max_access = min_access;
+    }
+    if(max_access >= getChannelAccess(user, chan, 1)) {
+        reply(getTextBot(), user, "NS_NO_ACCESS");
+        return;
+    }
+    MYSQL_RES *res;
+    MYSQL_ROW row;
+    int del_count = 0;
+    printf_mysql_query("SELECT `user_user`, `chanuser_id` FROM `chanusers` LEFT JOIN `users` ON `chanuser_uid` = `user_id` WHERE `chanuser_cid` = '%d' AND `chanuser_access` >= '%d' AND `chanuser_access` <= '%d'", chan->channel_id, min_access, max_access);
+    res = mysql_use();
+    while((row = mysql_fetch_row(res)) != NULL) {
+        if(!match(argv[1], row[0])) {
+            del_count++;
+            printf_mysql_query("DELETE FROM `chanusers` WHERE `chanuser_id` = '%s'", row[1]);
+        }
+    }
+    reply(getTextBot(), user, "NS_MDELUSER_DONE", del_count, argv[1], min_access, max_access, chan->name);
+}
+