X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/6538a4cb03fe89fa429364a3854cb4b4e3c5a9a3..6cac5cce0fedf3f0ed0de91d51539c8b8629fd9f:/extensions/chm_adminonly.c diff --git a/extensions/chm_adminonly.c b/extensions/chm_adminonly.c index f018de20..eba49cdc 100644 --- a/extensions/chm_adminonly.c +++ b/extensions/chm_adminonly.c @@ -10,6 +10,9 @@ #include "numeric.h" #include "chmode.h" +static const char chm_adminonly_desc[] = + "Enables channel mode +A that blocks non-admins from joining a channel"; + static void h_can_join(hook_data_channel *); mapi_hfn_list_av1 adminonly_hfnlist[] = { @@ -17,13 +20,14 @@ mapi_hfn_list_av1 adminonly_hfnlist[] = { { NULL, NULL } }; +static unsigned int mymode; + static int _modinit(void) { - chmode_table['A'].mode_type = find_cflag_slot(); - chmode_table['A'].set_func = chm_staff; - - construct_noparam_modes(); + mymode = cflag_add('A', chm_staff); + if (mymode == 0) + return -1; return 0; } @@ -31,12 +35,10 @@ _modinit(void) static void _moddeinit(void) { - chmode_table['A'].mode_type = 0; - - construct_noparam_modes(); + cflag_orphan('A'); } -DECLARE_MODULE_AV1(chm_adminonly, _modinit, _moddeinit, NULL, NULL, adminonly_hfnlist, "$Revision$"); +DECLARE_MODULE_AV2(chm_adminonly, _modinit, _moddeinit, NULL, NULL, adminonly_hfnlist, NULL, NULL, chm_adminonly_desc); static void h_can_join(hook_data_channel *data) @@ -44,7 +46,7 @@ h_can_join(hook_data_channel *data) struct Client *source_p = data->client; struct Channel *chptr = data->chptr; - if((chptr->mode.mode & chmode_flags['A']) && !IsOperAdmin(source_p)) { + if((chptr->mode.mode & mymode) && !IsAdmin(source_p)) { sendto_one_numeric(source_p, 519, "%s :Cannot join channel (+A) - you are not an IRC server administrator", chptr->chname); data->approved = ERR_CUSTOM; }