#include "stdinc.h"
#include "channel.h"
#include "client.h"
+#include "chmode.h"
#include "match.h"
#include "ircd.h"
#include "numeric.h"
#include "send.h"
-#include "s_serv.h"
#include "s_newconf.h"
+#include "s_serv.h"
+#include "s_user.h"
#include "msg.h"
#include "parse.h"
#include "modules.h"
static enum filter_state state = FILTER_EMPTY;
static char check_str[21] = "";
+static unsigned filter_chmode, filter_umode;
+
mapi_hfn_list_av1 filter_hfnlist[] = {
{ "privmsg_user", (hookfn) filter_msg_user },
{ "privmsg_channel", (hookfn) filter_msg_channel },
{mg_unreg, mg_not_oper, mg_ignore, mg_ignore, {me_setfilter, 2}, {mo_setfilter, 2}}
};
+static void
+modinit(void)
+{
+ filter_umode = user_modes['u'] = find_umode_slot();
+ construct_umodebuf();
+ filter_chmode = cflag_add('u', chm_simple);
+}
+
static void
moddeinit(void)
{
+ if (filter_umode) {
+ user_modes['u'] = 0;
+ construct_umodebuf();
+ }
+ if (filter_chmode)
+ cflag_orphan('u');
if (filter_scratch)
hs_free_scratch(filter_scratch);
if (filter_db)
mapi_clist_av1 filter_clist[] = { &setfilter_msgtab, NULL };
-DECLARE_MODULE_AV1(filter, NULL, moddeinit, filter_clist, NULL, filter_hfnlist, "0.3");
+DECLARE_MODULE_AV1(filter, modinit, moddeinit, filter_clist, NULL, filter_hfnlist, "0.3");
static int
setfilter(const char *check, const char *data, const char **error)
if (IsOper(s) || IsOper(data->target_p)) {
return;
}
+ if (data->target_p->umodes & filter_umode) {
+ return;
+ }
char *text = strcpy(clean_buffer, data->text);
strip_colour(text);
strip_unprintable(text);
if (IsOper(s)) {
return;
}
+ if (data->chptr->mode.mode & filter_chmode) {
+ return;
+ }
char *text = strcpy(clean_buffer, data->text);
strip_colour(text);
strip_unprintable(text);