X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/216574bec7f1a6250e89a273a2434b11eea86c3b..81e41406f4027dfef50dcd5ef33403661bea5995:/extensions/chm_operonly.c diff --git a/extensions/chm_operonly.c b/extensions/chm_operonly.c index b46fd8ac..ba4df9dd 100644 --- a/extensions/chm_operonly.c +++ b/extensions/chm_operonly.c @@ -10,6 +10,9 @@ #include "numeric.h" #include "chmode.h" +static const char chm_operonly_desc[] = + "Adds channel mode +O which makes a channel operator-only"; + static void h_can_join(hook_data_channel *); mapi_hfn_list_av1 operonly_hfnlist[] = { @@ -17,39 +20,26 @@ mapi_hfn_list_av1 operonly_hfnlist[] = { { NULL, NULL } }; +static unsigned int mymode; - -/* This is a simple example of how to use dynamic channel modes. - * Not tested enough yet, use at own risk. - * -- dwr - */ static int _modinit(void) { - /* add the channel mode to the available slot */ - chmode_table['O'].mode_type = find_cflag_slot(); - chmode_table['O'].set_func = chm_simple; - - construct_noparam_modes(); + mymode = cflag_add('O', chm_staff); + if (mymode == 0) + return -1; return 0; } -/* Well, the first ugly thing is that we changle chmode_table in _modinit - * and chmode_flags in _moddeinit (different arrays) - must be fixed. - * -- dwr - */ static void _moddeinit(void) { - /* disable the channel mode and remove it from the available list */ - chmode_table['O'].mode_type = 0; - - construct_noparam_modes(); + cflag_orphan('O'); } -DECLARE_MODULE_AV1(chm_operonly, _modinit, _moddeinit, NULL, NULL, operonly_hfnlist, "$Revision$"); +DECLARE_MODULE_AV2(chm_operonly, _modinit, _moddeinit, NULL, NULL, operonly_hfnlist, NULL, NULL, chm_operonly_desc); static void h_can_join(hook_data_channel *data) @@ -57,8 +47,8 @@ h_can_join(hook_data_channel *data) struct Client *source_p = data->client; struct Channel *chptr = data->chptr; - if((chptr->mode.mode & chmode_flags['O']) && !IsOper(source_p)) { - sendto_one_notice(source_p, ":Only IRC Operators could join this channel!"); + if((chptr->mode.mode & mymode) && !IsOper(source_p)) { + sendto_one_numeric(source_p, 520, "%s :Cannot join channel (+O) - you are not an IRC operator", chptr->chname); data->approved = ERR_CUSTOM; } }