/* * Deny user to remove +i flag except they are irc operators * * Based off no_oper_invis.c by jilles * * Note that +i must be included in default_umodes */ using namespace ircd; static const char noi_desc[] = "Do not allow users to remove user mode +i unless they are operators"; 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_AV2(force_user_invis, NULL, NULL, NULL, NULL, noi_hfnlist, NULL, NULL, noi_desc); static void h_noi_umode_changed(hook_data_umode_changed *hdata) { client::client *source_p = hdata->client; if (my(*source_p) && !is(*source_p, umode::OPER) && !is(*source_p, umode::INVISIBLE)) { set(*source_p, umode::INVISIBLE); } }