added cmd_delban
authorpk910 <philipp@zoelle1.de>
Fri, 9 Sep 2011 01:07:52 +0000 (03:07 +0200)
committerpk910 <philipp@zoelle1.de>
Fri, 9 Sep 2011 01:16:02 +0000 (03:16 +0200)
bot_NeonServ.c
cmd_neonserv_delban.c [new file with mode: 0644]

index 63887d15655ab68194c9f62115c483db450b8c04..5305913595233ceeff03b77f85410c4fa6a77ce7 100644 (file)
@@ -127,6 +127,9 @@ static const struct default_language_entry msgtab[] = {
     {"NS_BANS_HEADER_TRIGGERED", "Triggered"},
     {"NS_BANS_HEADER_EXPIRES", "Expires"},
     {"NS_BANS_HEADER_REASON", "Reason"},
+    {"NS_DELBAN_BANNED_BY", "%s is banned by %s."},
+    {"NS_DELBAN_FAIL", "Sorry, no ban found for \002%s\002."},
+    {"NS_DELBAN_DONE", "Removed \002%s\002 from the %s ban list."},
     {NULL, NULL}
 };
 
@@ -168,7 +171,7 @@ INCLUDE ALL CMD's HERE
 #include "cmd_neonserv_wipeinfo.c"
 #include "cmd_neonserv_addban.c"
 //#include "cmd_neonserv_addtimeban.c"
-//#include "cmd_neonserv_delban.c"
+#include "cmd_neonserv_delban.c"
 #include "cmd_neonserv_bans.c"
 //#include "cmd_neonserv_open.c"
 //#include "cmd_neonserv_topic.c"
@@ -310,6 +313,7 @@ void init_NeonServ() {
     register_command(BOTID, "wipeinfo",     neonserv_cmd_wipeinfo,  1, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH,  "#channel_wipeinfo",    0);
     register_command(BOTID, "addban",       neonserv_cmd_addban,    1, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH,  "#channel_staticban",   0);
     register_command(BOTID, "bans",         neonserv_cmd_bans,      0, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH,  "1",                    0);
+    register_command(BOTID, "delban",       neonserv_cmd_delban,    1, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH,  "#channel_staticban",   0);
     
     register_command(BOTID, "trace",        neonserv_cmd_trace,     1, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH,                                                   NULL,                   400);
     
diff --git a/cmd_neonserv_delban.c b/cmd_neonserv_delban.c
new file mode 100644 (file)
index 0000000..0ac7dcf
--- /dev/null
@@ -0,0 +1,34 @@
+
+/*
+* argv[0]    nick|*auth|*!*@mask
+*/
+
+static CMD_BIND(neonserv_cmd_delban) {
+    char hostmask_buffer[NICKLEN+USERLEN+HOSTLEN+3];
+    check_mysql();
+    char *mask = make_banmask(argv[0], hostmask_buffer);
+    int matching_bans = 0;
+    MYSQL_RES *res;
+    MYSQL_ROW row;
+    //check if the provided mask is already banned by another ban
+    char *ban = getBanAffectingMask(chan, mask);
+    if(ban != NULL) {
+        reply(getTextBot(), user, "NS_DELBAN_BANNED_BY", mask, ban);
+        return;
+    }
+    //check if the provided mask affects any existing bans
+    printf_mysql_query("SELECT `ban_mask`, `ban_id` FROM `bans` WHERE `ban_channel` = '%d'", chan->channel_id);
+    res = mysql_use();
+    while ((row = mysql_fetch_row(res)) != NULL) {
+        if(!match(mask, row[0])) {
+            //remove the ban
+            printf_mysql_query("DELETE FROM `bans` WHERE `ban_id` = '%s'", row[1]);
+            matching_bans++;
+        }
+    }
+    if(matching_bans) {
+        putsock(client, "MODE %s -b %s", chan->name, mask);
+        reply(getTextBot(), user, "NS_DELBAN_DONE", mask, chan->name);
+    } else
+        reply(getTextBot(), user, "NS_DELBAN_FAIL", mask);
+}