added cmd_setbad
authorpk910 <philipp@zoelle1.de>
Thu, 21 Jul 2011 23:31:41 +0000 (01:31 +0200)
committerpk910 <philipp@zoelle1.de>
Thu, 21 Jul 2011 23:41:50 +0000 (01:41 +0200)
src/mod-watchdog.c

index 3f48febcef2853e5020dde202f049374d070f4c1..9b9ea446147395466ecd538f4f974fbb90854039 100644 (file)
@@ -49,7 +49,12 @@ static const struct message_entry msgtab[] = {
     { "WDMSG_BADWORD_ADDED", "added '$b%s$b' to the badword list with ID %s." },
     { "WDMSG_BADWORD_NOT_FOUND", "badword with ID %s does not exist." },
     { "WDMSG_BADWORD_REMOVED", "badword ID $b%s$b has been removed (mask: '%s')" },
-    { "ID_DEBUG", "%s: %s" },
+    { "WDMSG_BADWORD_SET_DONE", "Done." },
+    { "WDMSG_BADWORD_SET_INVALID", "Invalid Option for setting %s" },
+    { "OSMSG_BADWORD_SETTING_INVALID", "unknown setting $b%s$b." },
+    { "WDMSG_BADWORD_SET", "Settings for BadWord entry $b%s$b" },
+    { "WDMSG_BADWORD_SET_MASK",   "$bMASK$b:   %s" },
+    { "WDMSG_BADWORD_SET_ACTION", "$bACTION$b: %s" },
     { NULL, NULL }
 };
 
@@ -66,7 +71,8 @@ struct watchdog_channel {
 };
 
 /* badword.action fields */
-#define BADACTION_KICK   1
+#define BADACTION_KICK   0
+#define BADACTION_BAN    1
 #define BADACTION_KILL   2
 #define BADACTION_GLINE  3
 
@@ -128,9 +134,67 @@ static MODCMD_FUNC(cmd_delbad)
     return 1;
 }
 
-static MODCMD_FUNC(cmd_editbad)
+static MODCMD_FUNC(cmd_setbad)
 {
-    //to be continued...
+    struct badword *badword;
+    if ((badword = dict_find(shitlist, argv[1], NULL))) {
+        if (argc > 3) {
+            unsigned int ii;
+            char *setting = argv[2];
+            char *value = argv[3];
+            for( ii = 0; setting[ ii ]; ii++)
+                setting[ ii ] = toupper( setting[ ii ] );
+            for( ii = 0; value[ ii ]; ii++)
+                value[ ii ] = toupper( value[ ii ] );
+            if(!strcmp("MASK",setting)) {
+                  free(badword->badword_mask);
+                  badword->badword_mask = strdup(argv[3]);
+                  reply("WDMSG_BADWORD_SET_DONE");
+            }
+            else if(!strcmp("ACTION",setting)) {
+                 if (!strcmp("1",value) || !strcmp("KICK",value)) {
+                    badword->action = BADACTION_KICK;
+                    reply("WDMSG_BADWORD_SET_DONE");
+                 } else if (!strcmp("2",value) || !strcmp("BAN",value)) {
+                    badword->action = BADACTION_BAN;
+                    reply("WDMSG_BADWORD_SET_DONE");
+                 } else if (!strcmp("3",value) || !strcmp("KILL",value)) {
+                    badword->action = BADACTION_KILL;
+                    reply("WDMSG_BADWORD_SET_DONE");
+                 } else if (!strcmp("4",value) || !strcmp("GLINE",value)) {
+                    badword->action = BADACTION_GLINE;
+                    reply("WDMSG_BADWORD_SET_DONE");
+                 } else {
+                    reply("WDMSG_BADWORD_SET_INVALID", setting);
+                 }
+            } else {
+                 reply("WDMSG_BADWORD_SETTING_INVALID", setting);
+            }
+            
+        } else {
+            reply("WDMSG_BADWORD_SET", badword->id);
+            reply("WDMSG_BADWORD_SET_MASK", badword->badword_mask);
+            switch(badword->action) {
+                case BADACTION_KICK:
+                  reply("WDMSG_BADWORD_SET_ACTION", "KICK");
+                  break;
+                case BADACTION_BAN:
+                  reply("WDMSG_BADWORD_SET_ACTION", "BAN");
+                  break;
+                case BADACTION_KILL:
+                  reply("WDMSG_BADWORD_SET_ACTION", "KILL");
+                  break;
+                case BADACTION_GLINE:
+                  reply("WDMSG_BADWORD_SET_ACTION", "GLINE");
+                  break;
+                default:
+                  reply("WDMSG_BADWORD_SET_ACTION", "*undef*");
+            }
+        }
+    } else {
+        reply("WDMSG_BADWORD_NOT_FOUND", argv[1]);
+        return 0;
+    }
     return 1;
 }
 
@@ -186,6 +250,9 @@ static MODCMD_FUNC(cmd_listbad)
             case BADACTION_KICK:
               tbl.contents[ii][2] = "KICK";
               break;
+            case BADACTION_BAN:
+              tbl.contents[ii][2] = "BAN";
+              break;
             case BADACTION_KILL:
               tbl.contents[ii][2] = "KILL";
               break;
@@ -476,7 +543,7 @@ watchdog_init(void)
     watchdog_module = module_register("Watchdog", MS_LOG, "mod-watchdog.help", NULL);
     modcmd_register(watchdog_module, "addbad", cmd_addbad, 2, MODCMD_REQUIRE_AUTHED, "flags", "+oper", NULL);
     modcmd_register(watchdog_module, "delbad", cmd_delbad, 2, MODCMD_REQUIRE_AUTHED, "flags", "+oper", NULL);
-    modcmd_register(watchdog_module, "editbad", cmd_editbad, 1, MODCMD_REQUIRE_AUTHED, "flags", "+oper", NULL);
+    modcmd_register(watchdog_module, "setbad", cmd_setbad, 2, MODCMD_REQUIRE_AUTHED, "flags", "+oper", NULL);
     modcmd_register(watchdog_module, "listbad", cmd_listbad, 1, MODCMD_REQUIRE_AUTHED, "flags", "+oper", NULL);
     modcmd_register(watchdog_module, "register", cmd_register, 2, MODCMD_REQUIRE_AUTHED, "flags", "+helping", NULL);
     modcmd_register(watchdog_module, "unregister", cmd_unregister, 1, MODCMD_REQUIRE_AUTHED | MODCMD_REQUIRE_CHANNEL, "flags", "+helping", NULL);