From: pk910 Date: Thu, 21 Jul 2011 01:25:14 +0000 (+0200) Subject: added cmd_register & cmd_unregister to mod-watchdog.c, fixed trigger & missing ;... X-Git-Url: http://git.pk910.de/?a=commitdiff_plain;ds=sidebyside;h=9213fa170331ee8919f3a0961f1715079e5281c1;p=srvx.git added cmd_register & cmd_unregister to mod-watchdog.c, fixed trigger & missing ; in example config block --- diff --git a/src/mod-watchdog.c b/src/mod-watchdog.c index 975cd1b..36b3ac5 100644 --- a/src/mod-watchdog.c +++ b/src/mod-watchdog.c @@ -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;