/** * ----------------------------------------------------------------------------- * Name : bs_autoassign * Author : Viper * Date : 22/08/2007 (Last update: 23/08/2007) * Version : 2.0 * ----------------------------------------------------------------------------- * Tested : Anope-1.7.19 + UnrealIRCd 3.2.6 * ----------------------------------------------------------------------------- * This module allows Botserv clients to be automatically assigned to newly registered * channels. The bot to be auto-assigned can be configured in the services configuration * file. If no nick is given, or no bot with that nick exists, no bot will be assigned. * * This module is a completely redesigned and rewritten version of the bs_autoassign * module wirtten by SGR. This version has been written specifically for the 1.7 branch * and will NOT work with the 1.6 branch or old 1.7 releases. * ----------------------------------------------------------------------------- * * Changelog: * * 2.0 Module Development taken over by me (Viper) * Beginning with clean development version. * * ----------------------------------------------------------------------------- **/ /** * Configuration directives that should be copy-pasted to services.conf # BSAutoAssignBot [OPTIONAL] # Module: bs_autoassign # # Specify the nickname of the Botserv client you want to automatically # assign to a newly registered channel. # If not specified or if no bot with the given nick exists, # no bot will be assigned to the channel. # #BSAutoAssignBot "ServiceBot" * **/ /*------------------------------Configuration Block----------------------------*/ /* There are currently no configurable items... */ /*-------------------------End of Configuration Block--------------------------*/ #include "module.h" #define AUTHOR "Viper" #define VERSION "2.0" /* Variables */ char *BotNick; /* Functions */ int do_registered(int ac, char **av); void load_config(void); int reload_config(int argc, char **argv); /* ------------------------------------------------------------------------------- */ /** * Create the command, and tell anope about it. * @param argc Argument count * @param argv Argument list * @return MOD_CONT to allow the module, MOD_STOP to stop it **/ int AnopeInit(int argc, char **argv) { EvtHook *hook; alog("[\002bs_autoassign\002] Loading module..."); /* Hook to events.. */ hook = createEventHook(EVENT_CHAN_REGISTERED, do_registered); if (moduleAddEventHook(hook) != MOD_ERR_OK) { alog("[\002bs_autoassign\002] Can't hook to EVENT_CHAN_REGISTERED event"); return MOD_STOP; } hook = createEventHook(EVENT_RELOAD, reload_config); if (moduleAddEventHook(hook) != MOD_ERR_OK) { alog("[\002bs_autoassign\002] Can't hook to EVENT_RELOAD event"); return MOD_STOP; } load_config(); moduleAddAuthor(AUTHOR); moduleAddVersion(VERSION); alog("[bs_autoassign] The following bot will be assigned to all newly registered channels: %s ", (BotNick ? BotNick : "")); alog("[\002bs_autoassign\002] Yayness!(tm) - MODULE LOADED AND ACTIVE"); return MOD_CONT; } /** * Unload the module **/ void AnopeFini(void) { /* Free the memory we used.. */ if (BotNick) free(BotNick); } /* ------------------------------------------------------------------------------- */ /** * Do some sanity checks - some of which should not even be necessary - and assign * bot with pre-configured nick - if it exists - to the channel. **/ int do_registered(int ac, char **av) { BotInfo *bi; ChannelInfo *ci; /* Some sanity checks.. */ if (!BotNick || ac != 1 || (!(ci = cs_findchan(av[0]))) || ci->bi || (ci->botflags & BS_NOBOT) || (!(bi = findbot(BotNick)))) return MOD_CONT; alog("[bs_autoassign] Auto assigning Bot to: %s [Bot: %s] [Founder: %s]", av[0], BotNick, ci->founder->display); ci->bi = bi; bi->chancount++; if (ci->c && ci->c->usercount >= BSMinUsers) bot_join(ci); anope_cmd_privmsg(bi->nick, ci->name, "I have been successfully assigned to this channel and shall join whenever there are mode then %d users present.", BSMinUsers); return MOD_CONT; } /* ------------------------------------------------------------------------------- */ /** * (Re)Load the configuration directives **/ void load_config(void) { int i; Directive confvalues[][1] = { {{"BSAutoAssignBot", {{PARAM_STRING, PARAM_RELOAD, &BotNick}}}}, }; if (BotNick) free(BotNick); BotNick = NULL; for (i = 0; i < 1; i++) moduleGetConfigDirective(confvalues[i]); if (debug) alog ("[bs_autoassign] Debug: BSAutoAssignBot set to %s", BotNick); } /** * Upon /os reload call the routines for reloading the configuration directives **/ int reload_config(int argc, char **argv) { if (argc >= 1) { if (!stricmp(argv[0], EVENT_START)) { alog("[bs_autoassign]: Reloading configuration directives..."); load_config(); alog("[bs_autoassign] The following bot will be assigned to all newly registered channels: %s ", (BotNick ? BotNick : "")); } } return MOD_CONT; } /* EOF */