X-Git-Url: https://jfr.im/git/irc/evilnet/x3.git/blobdiff_plain/fc8798ec4682f65c6aa3775327c896864df1ec00..ec8177c5c7b355a953871d6fded9ae77cf2a4a96:/src/modcmd.h diff --git a/src/modcmd.h b/src/modcmd.h index d503382..0feb737 100644 --- a/src/modcmd.h +++ b/src/modcmd.h @@ -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,13 +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 breef help for a command to a user. */ -int svccmd_send_help_breef(struct userNode *user, struct userNode *bot, struct svccmd *cmd); +/* 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. @@ -179,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);