]>
jfr.im git - irc/quakenet/newserv.git/blob - helpmod2/hcensor.c
2 #include <stdio.h> /* for debug */
11 hcensor
*hcensor_get_by_pattern(hcensor
*hcens
, const char *pat
)
13 for (;hcens
;hcens
= hcens
->next
)
14 if (!ci_strcmp(pat
, hcens
->pattern
->content
))
19 hcensor
*hcensor_get_by_index(hcensor
*hcens
, int index
)
21 if (index
> 512) /* some sanity */
24 while (index
&& hcens
)
33 hcensor
*hcensor_check(hcensor
*hcens
, const char *str
)
35 for (;hcens
;hcens
= hcens
->next
)
36 if (strregexp(str
, hcens
->pattern
->content
))
41 hcensor
*hcensor_add(hcensor
**hcens
, const char *pat
, const char *rsn
, hcensor_type type
)
45 if (hcensor_get_by_pattern(*hcens
, pat
))
48 tmp
= malloc(sizeof(hcensor
));
51 tmp
->pattern
= getsstring(pat
, strlen(pat
));
55 tmp
->reason
= getsstring(rsn
, strlen(rsn
));
64 hcensor
*hcensor_del(hcensor
**hcens
, hcensor
*ptr
)
66 for (;*hcens
;hcens
= &(*hcens
)->next
)
69 hcensor
*tmp
= (*hcens
)->next
;
70 freesstring((*hcens
)->pattern
);
71 freesstring((*hcens
)->reason
);
79 void hcensor_del_all(hcensor
**hcens
)
82 hcensor_del(hcens
, *hcens
);
85 int hcensor_count(hcensor
*hcens
)
88 for (;hcens
;hcens
= hcens
->next
, count
++);
92 int hcensor_match(hchannel
*hchan
, huser
*husr
, hcensor
*hcens
)
98 helpmod_reply(husr
, NULL
, hcens
->reason
->content
);
101 helpmod_kick(hchan
, husr
, hcens
->reason
?hcens
->reason
->content
:"Improper user");
103 case HCENSOR_CHANBAN
:
104 helpmod_setban(hchan
, hban_ban_string(husr
->real_user
, HBAN_HOST
), HCMD_OUT_DEFAULT
+ time(NULL
), MCB_ADD
, HNOW
);
105 helpmod_kick(hchan
, husr
, hcens
->reason
?hcens
->reason
->content
:"Censor violation");
108 hban_add(hban_ban_string(husr
->real_user
, HBAN_HOST
), hcens
->reason
?hcens
->reason
->content
:"Censor violation", HCMD_OUT_DEFAULT
+ time(NULL
), 1);
111 Error("helpmod", ERR_ERROR
, "Unknown censor type %d", hcens
->type
);
116 const char *hcensor_get_typename(hcensor_type type
)
124 case HCENSOR_CHANBAN
: