]> jfr.im git - solanum.git/commitdiff
Extension for +A (admin only) channel mode, currently belongs to type chm_staff as...
authorValery V Yatsko <redacted>
Wed, 13 Aug 2008 17:04:27 +0000 (21:04 +0400)
committerValery V Yatsko <redacted>
Wed, 13 Aug 2008 17:04:27 +0000 (21:04 +0400)
extensions/Makefile.in
extensions/chm_adminonly.c [new file with mode: 0644]

index ca7b808846c9f4f36393ff52b6510b8261d100c0..13c58db685d264e6c2884b4a2463d4a94db75e62 100644 (file)
@@ -27,6 +27,7 @@ INCLUDES      = -I. -I../include -I../libratbox/include $(SSL_INCLUDES)
 CPPFLAGS       = ${INCLUDES} @CPPFLAGS@
 
 SRCS =                          \
+  chm_adminonly.c              \
   chm_operonly.c               \
   chm_operonly_compat.c                \
   chm_quietunreg_compat.c      \
diff --git a/extensions/chm_adminonly.c b/extensions/chm_adminonly.c
new file mode 100644 (file)
index 0000000..f018de2
--- /dev/null
@@ -0,0 +1,52 @@
+#include "stdinc.h"
+#include "modules.h"
+#include "hook.h"
+#include "client.h"
+#include "ircd.h"
+#include "send.h"
+#include "s_conf.h"
+#include "s_user.h"
+#include "s_serv.h"
+#include "numeric.h"
+#include "chmode.h"
+
+static void h_can_join(hook_data_channel *);
+
+mapi_hfn_list_av1 adminonly_hfnlist[] = {
+       { "can_join", (hookfn) h_can_join },
+       { NULL, NULL }
+};
+
+static int
+_modinit(void)
+{
+       chmode_table['A'].mode_type = find_cflag_slot();
+       chmode_table['A'].set_func = chm_staff;
+
+       construct_noparam_modes();
+
+       return 0;
+}
+
+static void
+_moddeinit(void)
+{
+       chmode_table['A'].mode_type = 0;
+
+       construct_noparam_modes();
+}
+
+DECLARE_MODULE_AV1(chm_adminonly, _modinit, _moddeinit, NULL, NULL, adminonly_hfnlist, "$Revision$");
+
+static void
+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)) {
+               sendto_one_numeric(source_p, 519, "%s :Cannot join channel (+A) - you are not an IRC server administrator", chptr->chname);
+               data->approved = ERR_CUSTOM;
+       }
+}
+