diff --git a/extensions/Makefile.in b/extensions/Makefile.in index d9272d1..17c3b47 100644 --- a/extensions/Makefile.in +++ b/extensions/Makefile.in @@ -37,6 +37,7 @@ SRCS = \ extb_server.c \ extb_realname.c \ extb_extgecos.c \ + force_user_invis.c \ hurt.c \ ip_cloaking.c \ ip_cloaking_old.c \ diff --git a/extensions/force_user_invis.c b/extensions/force_user_invis.c new file mode 100644 index 0000000..fe6bbb4 --- /dev/null +++ b/extensions/force_user_invis.c @@ -0,0 +1,34 @@ +/* + * Deny user to remove +i flag except they are irc operators + * + * Based off no_oper_invis.c by jilles + * + */ + +#include "stdinc.h" +#include "modules.h" +#include "client.h" +#include "hook.h" +#include "ircd.h" +#include "send.h" +#include "s_conf.h" +#include "s_newconf.h" + +static void h_noi_umode_changed(hook_data_umode_changed *); + +mapi_hfn_list_av1 noi_hfnlist[] = { + { "umode_changed", (hookfn) h_noi_umode_changed }, + { NULL, NULL } +}; + +DECLARE_MODULE_AV1(force_user_invis, NULL, NULL, NULL, NULL, noi_hfnlist, "1.0.0"); + +static void +h_noi_umode_changed(hook_data_umode_changed *hdata) +{ + struct Client *source_p = hdata->client; + + if (MyClient(source_p) && !IsOper(source_p) && !IsInvisible(source_p)) { + SetInvisible(source_p); + } +}