]> jfr.im git - irc/evilnet/x3.git/blobdiff - src/modcmd.h
Fix for crash bug during burst where X3 sends a B (BURST) message with a channel...
[irc/evilnet/x3.git] / src / modcmd.h
index 4c5a8e5a46799894eff128a8573373e8aef233ab..0feb737079860d3c30179190808f844d77e94a3e 100644 (file)
@@ -3,9 +3,9 @@
  *
  * This file is part of x3.
  *
- * srvx is free software; you can redistribute it and/or modify
+ * x3 is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation; either version 3 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
@@ -32,16 +32,16 @@ struct modcmd;
 
 #define MODCMD_FUNC(NAME) int NAME(struct userNode *user, UNUSED_ARG(struct chanNode *channel), UNUSED_ARG(unsigned int argc), UNUSED_ARG(char **argv), UNUSED_ARG(struct svccmd *cmd))
 typedef MODCMD_FUNC(modcmd_func_t);
-#define SVCMSG_HOOK(NAME) int NAME(struct userNode *user, struct userNode *target, char *text, int server_qualified);
+#define SVCMSG_HOOK(NAME) int NAME(struct userNode *user, struct userNode *target, const char *text, int server_qualified)
 typedef SVCMSG_HOOK(svcmsg_hook_t);
 
 DECLARE_LIST(svccmd_list, struct svccmd*);
 DECLARE_LIST(module_list, struct module*);
 
-#if defined(__GNUC__) && (__GNUC__ < 3)
-#define reply(FMT...) send_message(user, cmd->parent->bot, FMT)
-#elif !defined(S_SPLINT_S) /* doesn't recognize C99 variadic macros */
-#define reply(...) send_message(user, cmd->parent->bot, __VA_ARGS__)
+#if defined(GCC_VARMACROS)
+# define reply(ARGS...) send_message(user, cmd->parent->bot, ARGS)
+#elif defined(C99_VARMACROS)
+# define reply(...) send_message(user, cmd->parent->bot, __VA_ARGS__)
 #endif
 #define modcmd_get_handle_info(USER, NAME) smart_get_handle_info(cmd->parent->bot, USER, NAME)
 #define modcmd_chanmode_announce(CHANGE) mod_chanmode_announce(cmd->parent->bot, channel, CHANGE)
@@ -75,6 +75,12 @@ DECLARE_LIST(module_list, struct module*);
 #define SVCCMD_DEBIT                  0x000002
 #define SVCCMD_NOISY                  0x000004
 
+/* We do not use constants for 0 (no logging) and 1 (regular logging) as those
+ * are used very often and are intuitive enough.
+ */
+#define CMD_LOG_STAFF       0x02
+#define CMD_LOG_OVERRIDE    0x04
+
 /* Modularized commands work like this:
  *
  * Modules define commands.  Services contain "bindings" of those
@@ -162,11 +168,14 @@ struct service *service_register(struct userNode *bot);
 struct service *service_find(const char *name);
 /* Bind one command to a service. */
 struct svccmd *service_bind_modcmd(struct service *service, struct modcmd *cmd, const char *name);
+struct svccmd *svccmd_resolve_name(struct svccmd *origin, const char *name);
 
 /* Send help for a command to a user. */
-int svccmd_send_help(struct userNode *user, struct userNode *bot, struct svccmd *cmd);
+int svccmd_send_help(struct userNode *user, struct service *service, const char *topic);
 /* .. and if somebody doesn't have a modcmd handy .. */
 int svccmd_send_help_2(struct userNode *user, struct service *service, const char *topic);
+/* Send brief help for a command to a user. */
+int svccmd_send_help_brief(struct userNode *user, struct userNode *bot, struct svccmd *cmd);
 /* Check whether a user may invoke a command or not.  If they can,
  * return non-zero.  If they cannot (and noisy is non-zero), tell them
  * why not and return 0.
@@ -177,8 +186,8 @@ int svccmd_invoke_argv(struct userNode *user, struct service *service, struct ch
 /* Get notification when a command is being unbound.  This lets
  * services which cache svccmd references remove them.
  */
-typedef void (*svccmd_unbind_func_t)(struct svccmd *target);
-void reg_svccmd_unbind_func(svccmd_unbind_func_t handler);
+typedef void (*svccmd_unbind_func_t)(struct svccmd *target, void *extra);
+void reg_svccmd_unbind_func(svccmd_unbind_func_t handler, void *extra);
 
 /* Initialize the module command subsystem. */
 void modcmd_init(void);