X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/1164cb72f8986627221c2cd6e9c44efdaa9fecc5..8c684fca9c7dbb4a2601628c744be9236ee68641:/chanserv/chanserv.c?ds=sidebyside diff --git a/chanserv/chanserv.c b/chanserv/chanserv.c index aaf535e3..09bcd425 100644 --- a/chanserv/chanserv.c +++ b/chanserv/chanserv.c @@ -7,74 +7,22 @@ #include "authlib.h" #include "../core/hooks.h" #include "../core/schedule.h" +#include "../lib/version.h" + +MODULE_VERSION(QVERSION); int chanservnext; int chanserv_init_status; sstring **chantypes; - -const flag rcflags[] = { - { 'a', QCFLAG_AUTOOP }, - { 'b', QCFLAG_BITCH }, - { 'c', QCFLAG_AUTOLIMIT }, - { 'e', QCFLAG_ENFORCE }, - { 'f', QCFLAG_FORCETOPIC }, - { 'g', QCFLAG_AUTOVOICE }, - { 'i', QCFLAG_INFO }, - { 'j', QCFLAG_JOINED }, - { 'k', QCFLAG_KNOWNONLY }, - { 'p', QCFLAG_PROTECT }, - { 't', QCFLAG_TOPICSAVE }, - { 'v', QCFLAG_VOICEALL }, - { 'w', QCFLAG_WELCOME }, - { 'z', QCFLAG_SUSPENDED }, - { '\0', 0 } }; - -const flag rcuflags[] = { - { 'a', QCUFLAG_AUTOOP }, - { 'b', QCUFLAG_BANNED }, - { 'd', QCUFLAG_DENY }, - { 'g', QCUFLAG_AUTOVOICE }, - { 'i', QCUFLAG_HIDEINFO }, - { 'j', QCUFLAG_AUTOINVITE }, - { 'k', QCUFLAG_KNOWN }, - { 'm', QCUFLAG_MASTER }, - { 'n', QCUFLAG_OWNER }, - { 'o', QCUFLAG_OP }, - { 'p', QCUFLAG_PROTECT }, - { 'q', QCUFLAG_QUIET }, - { 't', QCUFLAG_TOPIC }, - { 'v', QCUFLAG_VOICE }, - { 'w', QCUFLAG_HIDEWELCOME }, - { '\0', 0 } }; - -const flag ruflags[] = { - { 'a', QUFLAG_ADMIN }, - { 'd', QUFLAG_DEV }, - { 'D', QUFLAG_CLEANUPEXEMPT }, - { 'g', QUFLAG_GLINE }, - { 'G', QUFLAG_DELAYEDGLINE }, - { 'h', QUFLAG_HELPER }, - { 'i', QUFLAG_INFO }, - { 'l', QUFLAG_NEEDAUTH }, - { 'L', QUFLAG_NOAUTHLIMIT }, - { 'n', QUFLAG_NOTICE }, - { 'o', QUFLAG_OPER }, - { 'p', QUFLAG_PROTECT }, - { 'r', QUFLAG_RESTRICTED }, - { 'z', QUFLAG_SUSPENDED }, - { '\0', 0 } }; - -const flag mdflags[] = { - { 'l', MDFLAG_LIMIT }, - { 'b', MDFLAG_BANNED }, - { 'u', MDFLAG_ACTLIMIT }, - { '\0', 0 } }; +sstring *cs_quitreason; void chanservfreestuff(); void chanservfinishinit(int hooknum, void *arg); +DBModuleIdentifier q9dbid; + void chanservdumpstuff(void *arg) { dumplastjoindata("lastjoin.dump"); } @@ -86,6 +34,8 @@ void _init() { chanservcryptoinit(); csa_initregex(); + q9dbid = dbgetid(); + if (chanservext!=-1 && chanservnext!=-1 && chanservaext!=-1) { /* Set up the chantypes */ chantypes=(sstring **)malloc(CHANTYPES*sizeof(sstring *)); @@ -96,17 +46,20 @@ void _init() { chantypes[4]=getsstring("special",20); chantypes[5]=getsstring("gamesite",20); chantypes[6]=getsstring("game",20); + chantypes[7]=getsstring("upgrade",20); /* And the log system */ cs_initlog(); /* Set up the command handler, and built in commands */ chanservcommandinit(); - chanservaddcommand("showcommands", 0, 1, cs_doshowcommands, "Lists available commands.","Usage: SHOWCOMMANDS\n\nPrints a list of all commands currently available to you.\n"); + chanservaddcommand("showcommands", 0, 1, cs_doshowcommands, "Lists available commands.","Usage: SHOWCOMMANDS []\nPrints a list of commands currently available to you, where:\nmask - Mask of commands to list (* or ? are wildcards). If no mask is specified,\n all available commands are displayed."); chanservaddcommand("quit", QCMD_DEV, 1, cs_doquit, "Makes the bot QUIT and \"reconnect\".",""); + chanservaddcommand("setquitreason", QCMD_DEV, 1, cs_dosetquitreason, "Sets the reason to be sent when quitting due to an unload.",""); chanservaddcommand("rename", QCMD_DEV, 1, cs_dorename, "Changes the bot's name.",""); chanservaddcommand("rehash", QCMD_DEV, 0, cs_dorehash, "Reloads all text from database.",""); - chanservaddcommand("help", 0, 1, cs_dohelp, "Displays help on a specific command.","Usage: HELP \nShows help for a command, where:\ncommand - the command to show help for.\nFor a list of available commands, see SHOWCOMMANDS.\n"); + /* Make "HELP" take 2 arguments so things like "HELP chanflags #channel" work. Any junk after the command will go into arg 2 and be ignored. */ + chanservaddcommand("help", 0, 2, cs_dohelp, "Displays help on a specific command.","Usage: HELP \nShows help for a command, where:\ncommand - the command to show help for.\nFor a list of available commands, see SHOWCOMMANDS.\n"); chanservaddcommand("version", 0, 1, cs_doversion, "Show Version.","Usage: VERSION\nShows the version number of the running bot."); chanservaddctcpcommand("ping",cs_doctcpping); @@ -139,12 +92,14 @@ void chanservfinishinit(int hooknum, void *arg) { void chanserv_finalinit() { int i; - nick *np; + nick *np, *nnp; /* Scan for users */ for (i=0;inext) + for (np=nicktable[i];np;np=nnp) { + nnp=np->next; cs_checknick(np); + } /* Register core hooks */ registerhook(HOOK_NICK_NEWNICK, cs_handlenick); @@ -166,6 +121,8 @@ void chanserv_finalinit() { } void _fini() { + dbfreeid(q9dbid); + deleteallschedules(cs_timerfunc); deleteallschedules(chanservreguser); deleteallschedules(chanservdumpstuff); @@ -185,7 +142,9 @@ void _fini() { } if (chanservnick) - deregisterlocaluser(chanservnick, "Leaving"); + deregisterlocaluser(chanservnick, cs_quitreason?cs_quitreason->content:"Leaving"); + + freesstring(cs_quitreason); deregisterhook(HOOK_NICK_NEWNICK, cs_handlenick); deregisterhook(HOOK_NICK_ACCOUNT, cs_handlenick); @@ -207,6 +166,7 @@ void _fini() { chanservremovecommand("showcommands", cs_doshowcommands); chanservremovecommand("quit", cs_doquit); + chanservremovecommand("setquitreason", cs_dosetquitreason); chanservremovecommand("rename", cs_dorename); chanservremovecommand("rehash", cs_dorehash); chanservremovecommand("help", cs_dohelp); @@ -217,6 +177,7 @@ void _fini() { chanservcommandclose(); csa_freeregex(); + chanservcryptofree(); cs_closelog(); }