fixed compiler error
[srvx.git] / src / mod-watchdog.c
index ba8bc5988f2ae9584550dc74ee7a8c0c33f90040..26bee0434ea06bcbeb4c491d8dbdca3e0e93e73e 100644 (file)
@@ -60,7 +60,7 @@ static const struct message_entry msgtab[] = {
     { "WDMSG_BADWORD_SET", "Settings for BadWord entry $b%s$b" },
     { "WDMSG_BADWORD_SET_MASK",   "$bMASK$b:   %s" },
     { "WDMSG_BADWORD_SET_ACTION", "$bACTION$b: %s" },
-    { "WDMSG_BADWORD_ALERT", "%s used badword '%s' in channel: %s" },
+    { "WDMSG_BADWORD_SET_ALERT",  "$bALERT$b:  %d" },
     { NULL, NULL }
 };
 
@@ -83,12 +83,15 @@ struct watchdog_channel {
 #define BADACTION_KILL   2
 #define BADACTION_GLINE  3
 
+#define WDMSG_BADWORD_ALERT "%s used badword '%s' in channel: %s"
+
 static struct {
     const char *nick;
     const char *modes;
     const char *punishment_reason;
     unsigned long ban_duration;
     unsigned long gline_duration;
+    struct chanNode *alert_channel;
 } watchdog_conf;
 
 const char *watchdog_module_deps[] = { NULL };
@@ -101,8 +104,9 @@ static struct log_type *MS_LOG;
 static unsigned int last_badword_id = 0;
 
 static struct watchdog_channel *add_channel(const char *name);
-static struct badword *add_badword(const char *badword_mask, unsigned int triggered, unsigned int action, const char *id);
+static struct badword *add_badword(const char *badword_mask, unsigned int triggered, unsigned int action, unsigned int alert, const char *id);
 #define watchdog_notice(target, format...) send_message(target , watchdog , ## format)
+#define watchdog_debug(format...) do { if(watchdog_conf.alert_channel) send_channel_message(watchdog_conf.alert_channel , watchdog , ## format); } while(0)
 
 static MODCMD_FUNC(cmd_addbad)
 {
@@ -116,7 +120,7 @@ static MODCMD_FUNC(cmd_addbad)
         }
     }
 
-    struct badword *new_badword = add_badword(mask, 0, BADACTION_KICK, NULL);
+    struct badword *new_badword = add_badword(mask, 0, BADACTION_KICK, 0, NULL);
     for (it = dict_first(shitlist); it; it = iter_next(it)) {
         struct badword *badword = iter_data(it);
         if(match_ircglob(badword->badword_mask, new_badword->badword_mask) && badword != new_badword) {
@@ -182,8 +186,10 @@ static MODCMD_FUNC(cmd_setbad)
             else if(!strcmp("ALERT",setting)) {
                 if (!strcmp("0",value)) {
                        badword->alert = 0;
+                       reply("WDMSG_BADWORD_SET_DONE");
                 } else if (!strcmp("1",value)) {
                        badword->alert = 1;
+                       reply("WDMSG_BADWORD_SET_DONE");
                 } else {
                        reply("WDMSG_BADWORD_SET_INVALID", setting);
                 }
@@ -210,6 +216,7 @@ static MODCMD_FUNC(cmd_setbad)
                 default:
                   reply("WDMSG_BADWORD_SET_ACTION", "*undef*");
             }
+            reply("WDMSG_BADWORD_SET_ALERT", badword->alert);
         }
     } else {
         reply("WDMSG_BADWORD_NOT_FOUND", argv[1]);
@@ -383,7 +390,8 @@ watchdog_detected_badword(struct userNode *user, struct chanNode *chan, struct b
     char mask[IRC_NTOP_MAX_SIZE+3] = { '*', '@', '\0' };
     if(!IsOper(user)) {
        if(badword->alert == 1) {
-               log_module(MS_LOG, LOG_WARNING, "WDMSG_BADWORD_ALERT", user->nick, badword->badword_mask, channel->name);
+               log_module(MS_LOG, LOG_WARNING, "%s used badword '%s' in channel: %s", user->nick, badword->badword_mask, chan->name);
+               watchdog_debug(WDMSG_BADWORD_ALERT, user->nick, badword->badword_mask, chan->name);
        }
                switch(badword->action) {
                        case BADACTION_BAN:
@@ -527,6 +535,16 @@ watchdog_conf_read(void)
     
     str = database_get_data(conf_node, "punishment_reason", RECDB_QSTRING);
        watchdog_conf.punishment_reason = (str ? str : "Your message contained a forbidden word.");
+
+       str = database_get_data(conf_node, "alert_chan", RECDB_QSTRING);
+       if(str)
+       {
+               watchdog_conf.alert_channel = AddChannel(str, now, "+tinms", NULL);
+       }
+       else
+       {
+               watchdog_conf.alert_channel = NULL;
+       }
     
 }
 
@@ -535,7 +553,7 @@ watchdog_saxdb_read_shitlist(const char *name, void *data, UNUSED_ARG(void *extr
 {
     struct record_data *rd = data;
     char *badword;
-    char *triggered, *action;
+    char *triggered, *action, *alert;
 
      if (rd->type == RECDB_OBJECT) {
         dict_t obj = GET_RECORD_OBJECT(rd);