diff --git a/Bahamut.c b/Bahamut.c index f7b86e44..199dec4f 100644 --- a/Bahamut.c +++ b/Bahamut.c @@ -63,6 +63,8 @@ const char services_bot_modes[]= "+oS"; ircd_cmd cmd_list[] = { /* Command Function srvmsg */ + {MSG_PRIVATE, m_privmsg, 0}, + {MSG_NOTICE, m_notice, 0}, {MSG_STATS, m_stats, 0}, {MSG_VERSION, m_version, 0}, {MSG_MOTD, m_motd, 0}, diff --git a/ChangeLog b/ChangeLog index 692bfe5b..09ee2ee1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -35,6 +35,12 @@ NeoStats ChangeLog - Anything we add/remove/fix/change is in here (even our rant - Added system to overide the core parse and splitbuf functions for IRCu; will merge back into core when IRCu support complete (M) - Bug fix in NICKV2 for Unreal; realname was not parsed properly (M) + - Privmsg checks moved to ircd command lists and core function provided for processing (M) + - Add notice check to ircd command lists (M) + - Cleaned up bot message and bot chan message handling (M) + - Main services bot is not a mod_usr which tidies up command processing and let's NeoStats + show up in bot channel lists (M) + - Optimise core CTCP checks to avoid unnecessary processing (M) * NeoStats * Fish (F) * Version 2.5.14 - Fix a bug with HostServ unable to load the database diff --git a/Ircu.c b/Ircu.c index 452ecd2b..9250eed3 100644 --- a/Ircu.c +++ b/Ircu.c @@ -57,6 +57,8 @@ const char services_bot_modes[]= "+oS"; /* this is the command list and associated functions to run */ ircd_cmd cmd_list[] = { /* Command Function srvmsg */ + {MSG_PRIVATE, m_privmsg, 0}, + {MSG_NOTICE, m_notice, 0}, {MSG_STATS, m_stats, 0}, {MSG_VERSION, m_version, 0}, {MSG_MOTD, m_motd, 0}, diff --git a/Ircu.h b/Ircu.h index 048c56d0..7b9331c9 100644 --- a/Ircu.h +++ b/Ircu.h @@ -209,9 +209,6 @@ #define MSG_POST "POST" /* POS */ #define TOK_POST "POST" -/* message macros */ -#define is_privmsg(msg) ( !strcmp(MSG_PRIVATE, (msg)) || !strcmp("P", (msg)) || !strcmp("CPRIVMSG", (msg)) || !strcmp("CP", (msg))) - /* Umode chars */ #define UMODE_CH_LOCOP 'O' #define UMODE_CH_OPER 'o' diff --git a/QuantumIRCd.c b/QuantumIRCd.c index 3adfcb1d..aa987ff9 100644 --- a/QuantumIRCd.c +++ b/QuantumIRCd.c @@ -69,6 +69,8 @@ const char services_bot_modes[]= "+oS"; ircd_cmd cmd_list[] = { /* Command Function srvmsg */ + {MSG_PRIVATE, TOK_PRIVATE, m_privmsg, 0}, + {MSG_NOTICE, TOK_NOTICE, m_notice, 0}, {MSG_STATS, TOK_STATS, m_stats, 0}, {MSG_SETHOST, TOK_SETHOST, m_vhost, 0}, {MSG_VERSION, TOK_VERSION, m_version, 0}, diff --git a/QuantumIRCd.h b/QuantumIRCd.h index 549fc4c4..acec0325 100644 --- a/QuantumIRCd.h +++ b/QuantumIRCd.h @@ -353,9 +353,6 @@ #define MSG_CLIENT "CLIENT" #define MSG_SMODE "SMODE" -/* message macros */ -#define is_privmsg(msg) ( !strcmp (MSG_PRIVATE, (msg)) || !strcmp ("!", (msg)) ) - /* Umode chars */ #define UMODE_CH_LOCOP 'O' #define UMODE_CH_OPER 'o' diff --git a/Ultimate.c b/Ultimate.c index 347341d8..259cd7ef 100644 --- a/Ultimate.c +++ b/Ultimate.c @@ -78,6 +78,8 @@ const char services_bot_modes[]= "+oS"; ircd_cmd cmd_list[] = { /* Command Token Function srvmsg */ + {MSG_PRIVATE, /*TOK_PRIVATE, */m_privmsg, 0}, + {MSG_NOTICE, /*TOK_NOTICE, */m_notice, 0}, {MSG_STATS, /*TOK_STATS, */m_stats, 0}, {MSG_SETHOST, /*TOK_SETHOST, */m_vhost, 0}, {MSG_VERSION, /*TOK_VERSION, */m_version, 0}, diff --git a/Ultimate.h b/Ultimate.h index a4303f59..a338311e 100644 --- a/Ultimate.h +++ b/Ultimate.h @@ -378,9 +378,6 @@ #define MSG_CLIENT "CLIENT" #define MSG_SMODE "SMODE" -/* message macros */ -#define is_privmsg(msg) ( !strcmp (MSG_PRIVATE, (msg)) || !strcmp ("!", (msg)) ) - /* IRCD Specific mode chars */ #ifdef ULTIMATE3 #define UMODE_CH_LOCOP 'O' diff --git a/Unreal.c b/Unreal.c index 2c547152..26627b20 100644 --- a/Unreal.c +++ b/Unreal.c @@ -70,10 +70,12 @@ const char ircd_version[] = "(U32)"; #else const char ircd_version[] = "(U31)"; #endif -const char services_bot_modes[]= "+oSqd"; +const char services_bot_modes[]= "+oSq"; ircd_cmd cmd_list[] = { /*Message Token Function usage */ + {MSG_PRIVATE, TOK_PRIVATE, m_privmsg, 0}, + {MSG_NOTICE, TOK_NOTICE, m_notice, 0}, {MSG_STATS, TOK_STATS, m_stats, 0}, {MSG_SETHOST, TOK_SETHOST, m_vhost, 0}, {MSG_VERSION, TOK_VERSION, m_version, 0}, diff --git a/Unreal.h b/Unreal.h index fd6e8617..39987e3c 100644 --- a/Unreal.h +++ b/Unreal.h @@ -608,9 +608,6 @@ #define TOK_BOTSERV "BS" #endif -/* message macros */ -#define is_privmsg(msg) ( !strcmp (MSG_PRIVATE, (msg)) || !strcmp ("!", (msg)) ) - /* Umode chars */ #define UMODE_CH_LOCOP 'O' #define UMODE_CH_OPER 'o' diff --git a/commands.c b/commands.c index da2234f1..8a04096b 100755 --- a/commands.c +++ b/commands.c @@ -183,15 +183,15 @@ add_bot_cmd_list(ModUser* bot_ptr, bot_cmd* bot_cmd_list) if(bot_ptr->botcmds == NULL) { return NS_FAILURE; } - /* set the module */ SET_SEGV_INMODULE(bot_ptr->modname); - + /* Cycle through command list and add them */ while(bot_cmd_list->cmd) { add_bot_cmd(bot_ptr->botcmds, bot_cmd_list); bot_cmd_list++; } + CLEAR_SEGV_INMODULE(); return NS_SUCCESS; } @@ -206,7 +206,6 @@ del_bot_cmd_list(ModUser* bot_ptr, bot_cmd* bot_cmd_list) if(bot_ptr->botcmds == NULL) { return NS_FAILURE; } - /* set the module */ SET_SEGV_INMODULE(bot_ptr->modname); @@ -233,12 +232,8 @@ del_all_bot_cmds(ModUser* bot_ptr) if(bot_ptr->botcmds == NULL) { return NS_FAILURE; } - - /* set the module */ SET_SEGV_INMODULE(bot_ptr->modname); - - /* Cycle through command hash and delete each command */ hash_scan_begin(&hs, bot_ptr->botcmds); while ((cmdnode = hash_scan_next(&hs)) != NULL) { @@ -259,20 +254,10 @@ del_all_bot_cmds(ModUser* bot_ptr) int add_services_cmd_list(bot_cmd* bot_cmd_list) { - /* init bot hash if not created */ - if(botcmds == NULL) { - botcmds = hash_create(-1, 0, 0); - } - /* If unable to create hash return failure */ - if(botcmds == NULL) { - return NS_FAILURE; - } - /* Cycle through command list and add them */ - while(bot_cmd_list->cmd) { - add_bot_cmd(botcmds, bot_cmd_list); - bot_cmd_list++; - } - return NS_SUCCESS; + ModUser* bot_ptr; + + bot_ptr = findbot(s_Services); + return(add_bot_cmd_list(bot_ptr, bot_cmd_list)); } /** @brief del_services_cmd_list delete a list of commands from the services bot @@ -282,40 +267,10 @@ add_services_cmd_list(bot_cmd* bot_cmd_list) int del_services_cmd_list(bot_cmd* bot_cmd_list) { - /* If no hash return failure */ - if(botcmds == NULL) { - return NS_FAILURE; - } - /* Cycle through command list and delete them */ - while(bot_cmd_list->cmd) { - del_bot_cmd(botcmds, bot_cmd_list); - bot_cmd_list++; - } - return NS_SUCCESS; -} + ModUser* bot_ptr; -/** @brief servicesbot process services bot command list - * - * @return NS_SUCCESS if suceeds, NS_FAILURE if not - */ -void -servicesbot (char *nick, char **av, int ac) -{ - User *u; - - - SET_SEGV_LOCATION(); - u = finduser (nick); - if (!u) { - nlog (LOG_WARNING, LOG_CORE, "servicesbot: unable to find user %s (%s)", nick, s_Services); - return; - } - me.requests++; - /* Use fake bot structure so we can use the main command routine */ - strlcpy(fake_bot.nick, s_Services, MAXNICK); - fake_bot.botcmds = botcmds; - fake_bot.flags = me.onlyopers ? BOT_FLAG_ONLY_OPERS : 0; - run_bot_cmd (&fake_bot, u, av, ac); + bot_ptr = findbot(s_Services); + return(del_bot_cmd_list(bot_ptr, bot_cmd_list)); } /** @brief run_bot_cmd process bot command list @@ -411,20 +366,6 @@ run_bot_cmd (ModUser* bot_ptr, User *u, char **av, int ac) } #endif - /* Trap CTCP commands and silently drop them to avoid unknown command errors - * Why bother? Well we might be able to use some of them in the future - * so this is mainly a test and we may want to pass some of this onto - * SecureServ for a quick trojan check so log attempts to give an indication - * of usage. - */ - if (av[1][0] == '\1') { - char* buf; - buf = joinbuf(av, ac, 1); - nlog (LOG_NORMAL, LOG_MOD, "%s requested CTCP %s", u->nick, buf); - free(buf); - CLEAR_SEGV_INMODULE(); - return NS_SUCCESS; - } /* We have run out of commands so report failure */ prefmsg (u->nick, bot_ptr->nick, "Syntax error: unknown command: \2%s\2", av[1]); chanalert (bot_ptr->nick, "%s requested %s, but that is an unknown command", u->nick, av[1]); diff --git a/dl.c b/dl.c index f3d9fa1f..df272740 100644 --- a/dl.c +++ b/dl.c @@ -39,6 +39,8 @@ #include "sqlsrv/rta.h" #endif +#define MAX_CMD_LINE_LENGTH 350 + /** @brief Module list * */ @@ -798,6 +800,73 @@ bot_chan_message (char *origin, char **av, int ac) } } +/** @brief send a message to a channel bot + * + * @param origin + * @param av (note chan string in av[0]) + * @param ac + * + * @return none + */ +void +bot_message (char *origin, char **av, int ac) +{ + User *u; + ModUser *mod_usr; + + /* Check command length */ + if (strnlen (av[1], MAX_CMD_LINE_LENGTH) >= MAX_CMD_LINE_LENGTH) { + prefmsg (origin, s_Services, "command line too long!"); + notice (s_Services, "%s tried to send a very LARGE command, we told them to shove it!", origin); + return; + } + + /* Trap CTCP commands and silently drop them to avoid unknown command errors + * Why bother? Well we might be able to use some of them in the future + * so this is mainly a test and we may want to pass some of this onto + * SecureServ for a quick trojan check so log attempts to give an indication + * of usage. + */ + if (av[1][0] == '\1') { + char* buf; + buf = joinbuf(av, ac, 1); + nlog (LOG_NORMAL, LOG_MOD, "%s requested CTCP %s", origin, buf); + free(buf); + return; + } + + u = finduser (origin); + + if (flood (u)) { + return; + } + + mod_usr = findbot (av[0]); + /* Check to see if any of the Modules have this nick Registered */ + if (!mod_usr) { + nlog (LOG_DEBUG1, LOG_CORE, "bot_message: %s not found: %s", mod_usr->nick); + return; + } + nlog (LOG_DEBUG1, LOG_CORE, "bot_message: %s", mod_usr->nick); + + SET_SEGV_LOCATION(); + SET_SEGV_INMODULE(mod_usr->modname); + if (setjmp (sigvbuf) == 0) { + if(mod_usr->function) { + mod_usr->function (origin, av, ac); + } + else { + if (!u) { + nlog (LOG_WARNING, LOG_CORE, "Unable to finduser %s (%s)", origin, mod_usr->nick); + } else { + run_bot_cmd(mod_usr, u, av, ac); + } + } + } + CLEAR_SEGV_INMODULE(); + return; +} + /** @brief dump list of module bots and channels * * @param u @@ -884,6 +953,31 @@ add_mod_user (char *nick, char *mod_name) return NULL; } +/** @brief + * + * @param + * + * @return + */ +ModUser * +add_neostats_mod_user (char *nick) +{ + ModUser *mod_usr; + + SET_SEGV_LOCATION(); + /* add a brand new user */ + mod_usr = new_bot (nick); + if(mod_usr) { + strlcpy (mod_usr->modname, "NeoStats", MAX_MOD_NAME); + mod_usr->function = NULL; + mod_usr->chanfunc = NULL; + mod_usr->botcmds = hash_create(-1, 0, 0); + return mod_usr; + } + nlog (LOG_WARNING, LOG_CORE, "add_neostats_mod_user: Couldn't Add ModuleBot to List"); + return NULL; +} + /** @brief * * @param diff --git a/dl.h b/dl.h index 83d2bcf0..3ad7e1fd 100644 --- a/dl.h +++ b/dl.h @@ -223,6 +223,7 @@ int unload_module (char *module_name, User * u); int list_modules (User * u, char **av, int ac); int list_bots (User * u, char **av, int ac); ModUser* add_mod_user (char *nick, char *mod_name); +ModUser* add_neostats_mod_user (char *nick); int del_mod_user (char *nick); int add_mod_timer (char *func_name, char *timer_name, char *mod_name, int interval); int del_mod_timer (char *timer_name); @@ -240,6 +241,8 @@ int get_dl_handle (char *mod_name); void add_bot_to_chan (char *bot, char *chan); void del_bot_from_chan (char *bot, char *chan); void bot_chan_message (char *origin, char **av, int ac); +void bot_message (char *origin, char **av, int ac); + int list_bot_chans (User * u, char **av, int ac); int get_mod_num (char *mod_name); void unload_modules(void); diff --git a/hybrid7.c b/hybrid7.c index 6d099d9e..489e4898 100644 --- a/hybrid7.c +++ b/hybrid7.c @@ -61,6 +61,8 @@ const char services_bot_modes[]= "+o"; /* this is the command list and associated functions to run */ ircd_cmd cmd_list[] = { /* Command Function srvmsg */ + {MSG_PRIVATE, m_privmsg, 0}, + {MSG_NOTICE, m_notice, 0}, {MSG_STATS, m_stats, 0}, {MSG_VERSION, m_version, 0}, {MSG_MOTD, m_motd, 0}, diff --git a/hybrid7.h b/hybrid7.h index 2be18922..c5f6ce6c 100644 --- a/hybrid7.h +++ b/hybrid7.h @@ -214,9 +214,6 @@ #define MSG_SJOIN "SJOIN" #define MSG_TBURST "TBURST" -/* message macros */ -#define is_privmsg(msg) ( !strcmp (MSG_PRIVATE, (msg)) || !strcmp ("!", (msg)) ) - /* Umode chars */ #define UMODE_CH_LOCOP 'O' #define UMODE_CH_OPER 'o' diff --git a/ircd.c b/ircd.c index a6dc1be0..25a762f5 100644 --- a/ircd.c +++ b/ircd.c @@ -46,6 +46,8 @@ static long services_bot_umode= 0; #ifdef NEW_STYLE_SPLITBUF static char privmsgbuffer[BUFSIZE]; #endif +/* Temp flag for backward compatibility in new splitbuf system */ +static int SkipModuleFunction = 0; static int signon_newbot (const char *nick, const char *user, const char *host, const char *rname, long Umode); @@ -519,16 +521,35 @@ joinbuf (char **av, int ac, int from) * * @return none */ -static void -m_privmsg (int cmdptr, char* origin, char **av, int ac) +void +m_notice (char* origin, char **av, int ac, int cmdptr) +{ +#ifdef NEW_STYLE_SPLITBUF + int argc; + char **argv; + argc = split_buf (privmsgbuffer, &argv, 1); + ModuleFunction (cmdptr, MSG_NOTICE, origin, argv, argc); + free (argv); +#else + ModuleFunction (cmdptr, MSG_NOTICE, origin, av, ac); +#endif + SkipModuleFunction = 1; +} + +/** @brief process privmsg + * + * + * + * @return none + */ +void +m_privmsg (char* origin, char **av, int ac, int cmdptr) { #ifdef NEW_STYLE_SPLITBUF int argc; char **argv; #endif char target[64]; - User *u; - ModUser *mod_usr; /* its a privmsg, now lets see who too... */ if (strstr (av[0], "!")) { @@ -539,75 +560,21 @@ m_privmsg (int cmdptr, char* origin, char **av, int ac) av[0] = strtok (target, "@"); } - if (!strcasecmp (s_Services, av[0])) { - if (flood (finduser (origin))) { - return; - } - /* its to the Internal Services Bot */ #ifdef NEW_STYLE_SPLITBUF - argc = split_buf (privmsgbuffer, &argv, 1); - servicesbot (origin, argv, argc); - free (argv); -#else - servicesbot (origin, av, ac); -#endif - return; + argc = split_buf (privmsgbuffer, &argv, 1); + if(av[0][0] == '#') { + bot_chan_message (origin, argv, argc); } else { - mod_usr = findbot (av[0]); - /* Check to see if any of the Modules have this nick Registered */ - if (mod_usr) { - nlog (LOG_DEBUG1, LOG_CORE, "nicks: %s", mod_usr->nick); - if (flood (finduser (origin))) { - return; - } - - /* Check command length */ - if (strnlen (av[1], MAX_CMD_LINE_LENGTH) >= MAX_CMD_LINE_LENGTH) { - prefmsg (origin, s_Services, "command line too long!"); - notice (s_Services, "%s tried to send a very LARGE command, we told them to shove it!", origin); - return; - } - - SET_SEGV_LOCATION(); - SET_SEGV_INMODULE(mod_usr->modname); - if (setjmp (sigvbuf) == 0) { - if(mod_usr->function) { -#ifdef NEW_STYLE_SPLITBUF - argc = split_buf (privmsgbuffer, &argv, 1); - mod_usr->function (origin, argv, argc); - free (argv); -#else - mod_usr->function (origin, av, ac); -#endif - } - else { - u = finduser (origin); - if (!u) { - nlog (LOG_WARNING, LOG_CORE, "Unable to finduser %s (%s)", origin, mod_usr->nick); - } else { -#ifdef NEW_STYLE_SPLITBUF - argc = split_buf (privmsgbuffer, &argv, 1); - run_bot_cmd(mod_usr, u, argv, argc); - free (argv); -#else - run_bot_cmd(mod_usr, u, av, ac); -#endif - } - } - } - CLEAR_SEGV_INMODULE(); - return; - } else { -#ifdef NEW_STYLE_SPLITBUF - argc = split_buf (privmsgbuffer, &argv, 1); - bot_chan_message (origin, argv, argc); - free (argv); -#else - bot_chan_message (origin, av, ac); -#endif - return; - } + bot_message (origin, argv, argc); } + free (argv); +#else + if(av[0][0] == '#') { + bot_chan_message (origin, av, ac); + } else { + bot_message (origin, av, ac); + } +#endif return; } @@ -624,12 +591,7 @@ process_ircd_cmd (int cmdptr, char *cmd, char* origin, char **av, int ac) SET_SEGV_LOCATION(); - /* If a privmsg, handle it internally */ - if( is_privmsg(cmd) ) { - m_privmsg (cmdptr, origin, av, ac); - return; - } - + printf("%s\n",cmd); for (i = 0; i < ircd_cmdcount; i++) { if (!strcmp (cmd_list[i].name, cmd) #ifdef GOTTOKENSUPPORT @@ -651,7 +613,10 @@ process_ircd_cmd (int cmdptr, char *cmd, char* origin, char **av, int ac) } #endif /* Send to modules */ - ModuleFunction (cmdptr, cmd, origin, av, ac); + if(!SkipModuleFunction) { + ModuleFunction (cmdptr, cmd, origin, av, ac); + } + SkipModuleFunction = 0; } /** @brief parse @@ -670,6 +635,7 @@ parse (char *line) char **av; SET_SEGV_LOCATION(); + strip (line); strlcpy (recbuf, line, BUFSIZE); if (!(*line)) @@ -700,13 +666,8 @@ parse (char *line) strlcpy (cmd, line, sizeof (cmd)); #ifdef NEW_STYLE_SPLITBUF strlcpy (privmsgbuffer, coreLine, BUFSIZE); - if(strcmp(cmd,"NOTICE")==0||strcmp(cmd,"B")==0) - ac = split_buf (coreLine, &av, 1); - else - ac = splitbuf (coreLine, &av, 1); -#else - ac = splitbuf (coreLine, &av, 1); #endif + ac = splitbuf (coreLine, &av, 1); process_ircd_cmd (cmdptr, cmd, origin, av, ac); free (av); } diff --git a/ircd.h b/ircd.h index 814ae7e9..9bca5442 100644 --- a/ircd.h +++ b/ircd.h @@ -23,8 +23,6 @@ #ifndef IRCD_H #define IRCD_H -#define MAX_CMD_LINE_LENGTH 350 - typedef void (*ircd_cmd_handler) (char *origin, char **argv, int argc, int srv); typedef struct ircd_cmd{ @@ -87,6 +85,8 @@ void ns_usr_pong (char *origin, char **argv, int argc); void ns_usr_version (char *origin, char **argv, int argc); void ns_srv_protocol(char *origin, char **argv, int argc); void handle_sjoin (char* tstime, char* channame, char *modes, int offset, char *sjoinchan, char **argv, int argc); +void m_privmsg (char* origin, char **av, int ac, int cmdptr); +void m_notice (char* origin, char **av, int ac, int cmdptr); /* Defined in ircd specific files but common to all */ void init_ircd (void); diff --git a/liquidircd.c b/liquidircd.c index a4dea7ad..167c2646 100644 --- a/liquidircd.c +++ b/liquidircd.c @@ -64,6 +64,8 @@ const char services_bot_modes[]= "+oS"; ircd_cmd cmd_list[] = { /* Command Function srvmsg */ + {MSG_PRIVATE, m_privmsg, 0}, + {MSG_NOTICE, m_notice, 0}, {MSG_STATS, m_stats, 0}, {MSG_SETHOST, m_vhost, 0}, {MSG_VERSION, m_version, 0}, diff --git a/liquidircd.h b/liquidircd.h index d7a1d8d2..b32cc25e 100644 --- a/liquidircd.h +++ b/liquidircd.h @@ -177,9 +177,6 @@ #define MSG_LAG "LAG" /* LAG */ #define MSG_LAGTEST "LAGTEST" /* LAGTEST */ -/* message macros */ -#define is_privmsg(msg) ( !strcmp (MSG_PRIVATE, (msg)) || !strcmp ("!", (msg)) ) - /* Umode chars */ #define UMODE_CH_LOCOP 'O' #define UMODE_CH_OPER 'o' diff --git a/mystic.c b/mystic.c index 63990454..d574d1aa 100644 --- a/mystic.c +++ b/mystic.c @@ -65,6 +65,8 @@ const char services_bot_modes[]= "+oS"; ircd_cmd cmd_list[] = { /* Command Function srvmsg */ + {MSG_PRIVATE, TOK_PRIVATE, m_privmsg, 0}, + {MSG_NOTICE, TOK_NOTICE, m_notice, 0}, {MSG_STATS, TOK_STATS, m_stats, 0}, {MSG_SETHOST, TOK_SETHOST, m_vhost, 0}, {MSG_VERSION, TOK_VERSION, m_version, 0}, diff --git a/mystic.h b/mystic.h index 18287db7..44ae4f4f 100644 --- a/mystic.h +++ b/mystic.h @@ -355,9 +355,6 @@ #define MSG_LOVESERV "LOVESERV" /* LOVESERV */ #define TOK_LOVESERV "!Y" /* 33 + 90 */ -/* message macros */ -#define is_privmsg(msg) ( !strcmp (MSG_PRIVATE, (msg)) || !strcmp ("!", (msg)) ) - /* Umode chars */ #define UMODE_CH_LOCOP 'O' #define UMODE_CH_OPER 'o' diff --git a/neoircd.c b/neoircd.c index f4ba8661..0b45753b 100644 --- a/neoircd.c +++ b/neoircd.c @@ -61,6 +61,8 @@ const char services_bot_modes[]= "+oS"; /* this is the command list and associated functions to run */ ircd_cmd cmd_list[] = { /* Command Function srvmsg */ + {MSG_PRIVATE, m_privmsg, 0}, + {MSG_NOTICE, m_notice, 0}, {MSG_STATS, m_stats, 0}, {MSG_VERSION, m_version, 0}, {MSG_MOTD, m_motd, 0}, diff --git a/neoircd.h b/neoircd.h index 21ae66cc..14ef1905 100644 --- a/neoircd.h +++ b/neoircd.h @@ -214,9 +214,6 @@ #define MSG_SJOIN "SJOIN" #define MSG_TBURST "TBURST" -/* message macros */ -#define is_privmsg(msg) ( !strcmp (MSG_PRIVATE, (msg)) || !strcmp ("!", (msg)) ) - /* Umode chars */ #define UMODE_CH_LOCOP 'O' #define UMODE_CH_OPER 'o' diff --git a/services.c b/services.c index 40e71526..392c60d3 100644 --- a/services.c +++ b/services.c @@ -56,6 +56,9 @@ static int ns_unload (User * u, char **av, int ac); static char quitmsg[BUFSIZE]; static char no_reason[]="no reason given"; +#undef NS_ULEVEL_ROOT +#define NS_ULEVEL_ROOT 0 + static bot_cmd ns_commands[]= { {"LEVEL", ns_level, 0, 0, ns_help_level, ns_help_level_oneline}, @@ -92,8 +95,13 @@ static bot_cmd ns_commands[]= int init_services(void) { + ModUser* bot_ptr; + SET_SEGV_LOCATION(); /* Add command list to services bot */ + bot_ptr = add_neostats_mod_user (s_Services); + bot_ptr->flags = me.onlyopers ? BOT_FLAG_ONLY_OPERS : 0; + bot_ptr->botcmds = hash_create(-1, 0, 0); add_services_cmd_list(ns_commands); return NS_SUCCESS; }