added cmd_register & cmd_unregister to mod-watchdog.c, fixed trigger & missing ;...
authorpk910 <philipp@zoelle1.de>
Thu, 21 Jul 2011 01:25:14 +0000 (03:25 +0200)
committerpk910 <philipp@zoelle1.de>
Thu, 21 Jul 2011 02:15:45 +0000 (04:15 +0200)
src/mod-watchdog.c

index 975cd1b116194a8c79b64d9cc7fcd91ade66a86b..36b3ac57e5fe892cb952c5f4b04a3d8bfa60b352 100644 (file)
@@ -22,7 +22,7 @@
  * "modules" {
  *     "watchdog" {
  *         "nick" "Watchdog";
- *         "modes" "+iok"
+ *         "modes" "+iok";
  *     };
  *  };
  *
@@ -41,7 +41,8 @@
 #define KEY_CHANNELS "channel"
 
 static const struct message_entry msgtab[] = {
-    { "WDMSG_NULL", "null." },
+    { "WD_REGISTER_SUCCESS", "$b%s$b is now registered with %s." },
+    { "WD_NOT_REGISTERED", "$b%s$b is not registered with %s." },
     { NULL, NULL }
 };
 
@@ -102,16 +103,61 @@ static MODCMD_FUNC(cmd_listbad)
     return 1;
 }
 
+static struct watchdog_channel *add_channel(const char *name);
+
 static MODCMD_FUNC(cmd_register)
 {
-    //to be continued...
+    dict_iterator_t it;
+
+    if((argc < 2) || !IsChannelName(argv[1]))
+    {
+        reply("MSG_NOT_CHANNEL_NAME");
+        return 0;
+    }
+
+    if(opserv_bad_channel(argv[1]))
+    {
+        reply("CSMSG_ILLEGAL_CHANNEL", argv[1]);
+        return 0;
+    }
+
+    channel = AddChannel(argv[1], now, NULL, NULL);
+
+    for (it = dict_first(chanlist); it; it = iter_next(it)) {
+        struct watchdog_channel *chan = iter_data(it);
+        if(chan->channel == channel) {
+            reply("CSMSG_ALREADY_REGGED", channel->name);
+            return 0;
+        }
+    }
+
+    add_channel(channel->name);
+    reply("WD_REGISTER_SUCCESS", channel->name, watchdog->nick);
     return 1;
 }
 
 static MODCMD_FUNC(cmd_unregister)
 {
-    //to be continued...
-    return 1;
+    struct watchdog_channel *chan = NULL;
+    dict_iterator_t it;
+    
+    for (it = dict_first(chanlist); it; it = iter_next(it)) {
+        chan = iter_data(it);
+        if(chan->channel == channel)
+            break;
+    }
+    
+    if(chan && chan->channel == channel) {
+        //found, unregister it!
+        DelChannelUser(watchdog, channel, "unregistered.", 0);
+        dict_remove(chanlist, channel->name);
+        reply("CSMSG_UNREG_SUCCESS", channel->name);
+        return 1;
+    } else {
+        reply("WD_NOT_REGISTERED", channel->name, watchdog->nick);
+        return 0;
+    }
+
 }
 
 static void
@@ -148,13 +194,22 @@ static struct watchdog_channel*
 add_channel(const char *name)
 {
     struct watchdog_channel *wc;
+    struct mod_chanmode *change;
+
+    if(!watchdog) //module disabled
+        return NULL;
 
     wc = calloc(1, sizeof(*wc));
     if (!wc)
         return NULL;
 
     wc->channel = AddChannel(name, now, NULL, NULL);
-    AddChannelUser(watchdog, wc->channel)->modes |= MODE_CHANOP;
+    change = mod_chanmode_alloc(1);
+    change->argc = 1;
+    change->args[0].mode = MODE_CHANOP;
+    change->args[0].u.member = AddChannelUser(watchdog, wc->channel);
+    mod_chanmode_announce(watchdog, wc->channel, change);
+       mod_chanmode_free(change);
     dict_insert(chanlist, wc->channel->name, wc);
     return wc;
 }
@@ -298,6 +353,7 @@ watchdog_init(void)
         modes = conf_get_data("modules/watchdog/modes", RECDB_QSTRING);
         watchdog = AddLocalUser(nick, nick, NULL, "Watchdog Service", modes);
         watchdog_service = service_register(watchdog);
+        watchdog_service->trigger = ',';
         reg_allchanmsg_func(watchdog, watchdog_channel_message);
     }
 
@@ -307,7 +363,7 @@ watchdog_init(void)
     modcmd_register(watchdog_module, "editbad", cmd_editbad, 1, 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, 1, MODCMD_REQUIRE_AUTHED, "flags", "+helping", NULL);
-    modcmd_register(watchdog_module, "unregister", cmd_unregister, 1, MODCMD_REQUIRE_AUTHED, "flags", "+helping", NULL);
+    modcmd_register(watchdog_module, "unregister", cmd_unregister, 1, MODCMD_REQUIRE_AUTHED | MODCMD_REQUIRE_CHANNEL, "flags", "+helping", NULL);
     message_register_table(msgtab);
 
     return 1;