]> jfr.im git - irc/quakenet/newserv.git/blobdiff - helpmod2/hcensor.c
Merge pull request #1 from meeb/meeb
[irc/quakenet/newserv.git] / helpmod2 / hcensor.c
index cc785faeb419f9feba327ac82442bbd2acd3587f..535b3907ea62114b913c94561c0c1bee1e2aaf41 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)
 {
@@ -36,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;
 
@@ -47,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
@@ -84,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, "%s", hcens->reason->content);
+       return 0;
+    case HCENSOR_KICK:
+       helpmod_kick(hchan, husr, "%s", 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, "%s", 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";
+    }
+}