]> jfr.im git - irc/quakenet/newserv.git/blobdiff - helpmod2/hcensor.c
Large reorganisation of all Makefiles, including new configure script.
[irc/quakenet/newserv.git] / helpmod2 / hcensor.c
index 9fe9731f16d25405ccf103a9b1de006d828926ab..7e379161d64dce801b963ddae0805754cc9bedd1 100644 (file)
@@ -3,8 +3,10 @@
 #include <string.h>
 
 #include "hcensor.h"
-
+#include "hcommands.h"
+#include "helpmod.h"
 #include "hgen.h"
+#include "hban.h"
 
 hcensor *hcensor_get_by_pattern(hcensor *hcens, const char *pat)
 {
@@ -20,7 +22,10 @@ hcensor *hcensor_get_by_index(hcensor *hcens, int index)
         return NULL;
 
     while (index && hcens)
-        hcens = hcens->next;
+    {
+       hcens = hcens->next;
+       index--;
+    }
 
     return hcens;
 }
@@ -33,7 +38,7 @@ hcensor *hcensor_check(hcensor *hcens, const char *str)
     return NULL;
 }
 
-hcensor *hcensor_add(hcensor **hcens, const char *pat, const char *rsn)
+hcensor *hcensor_add(hcensor **hcens, const char *pat, const char *rsn, hcensor_type type)
 {
     hcensor *tmp;
 
@@ -44,6 +49,8 @@ hcensor *hcensor_add(hcensor **hcens, const char *pat, const char *rsn)
     tmp->next = *hcens;
 
     tmp->pattern = getsstring(pat, strlen(pat));
+    tmp->type = type;
+
     if (rsn)
         tmp->reason = getsstring(rsn, strlen(rsn));
     else
@@ -81,3 +88,44 @@ int hcensor_count(hcensor *hcens)
     for (;hcens;hcens = hcens->next, count++);
     return count;
 }
+
+int hcensor_match(hchannel *hchan, huser *husr, hcensor *hcens)
+{
+    switch (hcens->type)
+    {
+    case HCENSOR_WARN:
+        if (hcens->reason)
+           helpmod_reply(husr, NULL, hcens->reason->content);
+       return 0;
+    case HCENSOR_KICK:
+       helpmod_kick(hchan, husr, hcens->reason?hcens->reason->content:"Improper user");
+       return !0;
+    case HCENSOR_CHANBAN:
+       helpmod_setban(hchan, hban_ban_string(husr->real_user, HBAN_HOST), HCMD_OUT_DEFAULT + time(NULL), MCB_ADD, HNOW);
+       helpmod_kick(hchan, husr, hcens->reason?hcens->reason->content:"Censor violation");
+       return !0;
+    case HCENSOR_BAN:
+       hban_add(hban_ban_string(husr->real_user, HBAN_HOST), hcens->reason?hcens->reason->content:"Censor violation", HCMD_OUT_DEFAULT + time(NULL), 1);
+       return !0;
+    default:
+       Error("helpmod", ERR_ERROR, "Unknown censor type %d", hcens->type);
+        return !0;
+    }
+}
+
+const char *hcensor_get_typename(hcensor_type type)
+{
+    switch (type)
+    {
+    case HCENSOR_WARN:
+       return "warn";
+    case HCENSOR_KICK:
+       return "kick";
+    case HCENSOR_CHANBAN:
+        return "chanban";
+    case HCENSOR_BAN:
+        return "ban";
+    default:
+        return "error";
+    }
+}