From: Gunnar Beutner Date: Mon, 12 Aug 2013 02:28:33 +0000 (+0200) Subject: request: Make RQ_* settings configurable. X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/commitdiff_plain/7e6b4e43ecc44c223237b12451fe72b4f5bd57dd request: Make RQ_* settings configurable. --- diff --git a/MODULES b/MODULES index eadce43e..64ed5a78 100644 --- a/MODULES +++ b/MODULES @@ -169,9 +169,19 @@ Does on-connect proxy scans and glines open proxies. request ~~~~~~ -This is QuakeNet's channel service request bot (R). Some of the module -parameters are not configurable - instead you will have to modify the -request/request.h header file and recompile the module. +This is QuakeNet's channel service request bot (R). + +Configuration: + +[request] +#nick=R +#user=request +#host=request.quakenet.org +#real=Service Request v0.23 +#snick=S +#sserver=spamscan.quakenet.org +#qnick=Q +#qserver=cserve.quakenet.org serverlist ~~~~~~~~~ diff --git a/request/lrequest.c b/request/lrequest.c index 51d7ebd8..feed150a 100644 --- a/request/lrequest.c +++ b/request/lrequest.c @@ -54,7 +54,7 @@ int lr_requestl(nick *svc, nick *np, channel *cp, nick *qnick) { /* treat blocked users as if they're out of targets */ if(rq_findblock(np->authname) || !rq_tryfasttrack(np)) { sendnoticetouser(svc, np, "Sorry, you may not request %s for another " - "channel at this time. Please try again in an hour.", RQ_QNICK); + "channel at this time. Please try again in an hour.", rq_qnick->content); lr_notargets++; @@ -66,7 +66,7 @@ int lr_requestl(nick *svc, nick *np, channel *cp, nick *qnick) { sendnoticetouser(svc, np, "Success! %s has been added to '%s' " "(contact #help if you require further assistance).", - RQ_QNICK, cp->index->name->content); + rq_qnick->content, cp->index->name->content); return RQ_OK; } diff --git a/request/request.c b/request/request.c index 7c192909..45d8ec76 100644 --- a/request/request.c +++ b/request/request.c @@ -4,6 +4,7 @@ #include #include "../localuser/localuser.h" #include "../localuser/localuserchannel.h" +#include "../core/config.h" #include "../core/schedule.h" #include "../lib/irc_string.h" #include "../lib/splitline.h" @@ -44,9 +45,16 @@ int rq_blocked = 0; /* log fd */ FILE *rq_logfd; +/* config */ +sstring *rq_qserver, *rq_qnick, *rq_sserver, *rq_snick; +sstring *rq_nick, *rq_user, *rq_host, *rq_real, *rq_auth; +int rq_authid; + static int extloaded = 0; void _init(void) { + sstring *m; + if(!rq_initblocks()) return; @@ -55,6 +63,22 @@ void _init(void) { extloaded = 1; + rq_nick = getcopyconfigitem("request", "nick", "R", BUFSIZE); + rq_user = getcopyconfigitem("request", "user", "request", BUFSIZE); + rq_host = getcopyconfigitem("request", "host", "request.quakenet.org", BUFSIZE); + rq_real = getcopyconfigitem("request", "real", "Service Request v0.23", BUFSIZE); + rq_auth = getcopyconfigitem("request", "auth", "R", BUFSIZE); + rq_qnick = getcopyconfigitem("request", "qnick", "Q", BUFSIZE); + rq_qserver = getcopyconfigitem("request", "qserver", "CServe.quakenet.org", BUFSIZE); + rq_snick = getcopyconfigitem("request", "snick", "S", BUFSIZE); + rq_sserver = getcopyconfigitem("request", "sserver", "services2.uk.quakenet.org", BUFSIZE); + + m = getconfigitem("request", "authid"); + if (!m) + rq_authid = 1780711; + else + rq_authid = atoi(m->content); + rqcommands = newcommandtree(); addcommandtotree(rqcommands, "showcommands", RQU_ANY, 1, &rqcmd_showcommands); @@ -69,7 +93,7 @@ void _init(void) { qr_initrequest(); - rq_logfd = fopen(RQ_LOGFILE, "a"); + rq_logfd = fopen("logs/request.log", "a"); scheduleoneshot(time(NULL) + 1, (ScheduleCallback)&rq_registeruser, NULL); } @@ -96,6 +120,12 @@ void _fini(void) { rq_finifasttrack(); qr_finirequest(); + freesstring(rq_nick); + freesstring(rq_user); + freesstring(rq_host); + freesstring(rq_real); + freesstring(rq_auth); + if (rq_logfd != NULL) fclose(rq_logfd); @@ -105,15 +135,15 @@ void _fini(void) { void rq_registeruser(void) { channel *cp; - rqnick = registerlocaluserflags(RQ_REQUEST_NICK, RQ_REQUEST_USER, RQ_REQUEST_HOST, - RQ_REQUEST_REAL, RQ_REQUEST_AUTH, RQ_REQUEST_AUTHID, 0, + rqnick = registerlocaluserflags(rq_nick->content, rq_user->content, rq_host->content, + rq_real->content, rq_auth->content, rq_authid, 0, UMODE_ACCOUNT | UMODE_SERVICE | UMODE_OPER, rq_handler); - cp = findchannel(RQ_TLZ); + cp = findchannel("#twilightzone"); if (cp == NULL) - localcreatechannel(rqnick, RQ_TLZ); + localcreatechannel(rqnick, "#twilightzone"); else localjoinchannel(rqnick, cp); } @@ -221,11 +251,11 @@ int rq_genericrequestcheck(nick *np, char *channelname, channel **cp, nick **qni return RQ_ERROR; } - *qnick = getnickbynick(RQ_QNICK); + *qnick = getnickbynick(rq_qnick->content); - if (*qnick == NULL || findserver(RQ_QSERVER) < 0) { + if (*qnick == NULL || findserver(rq_qserver->content) < 0) { sendnoticetouser(rqnick, np, "Error: %s does not seem to be online. " - "Please try again later.", RQ_QNICK); + "Please try again later.", rq_qnick->content); return RQ_ERROR; } @@ -317,7 +347,7 @@ int rqcmd_request(void *user, int cargc, char **cargv) { qhand = getnumerichandlefromchanhash(cp->users, qnick->numeric); if (qhand != NULL) { - sendnoticetouser(rqnick, np, "Error: %s is already on that channel.", RQ_QNICK); + sendnoticetouser(rqnick, np, "Error: %s is already on that channel.", rq_qnick->content); rq_failed++; @@ -332,7 +362,7 @@ int rqcmd_request(void *user, int cargc, char **cargv) { strftime(now, sizeof(now), "%c", localtime(&now_ts)); fprintf(rq_logfd, "%s: request (%s) for %s from %s!%s@%s%s%s: Request was %s.\n", - now, RQ_QNICK, cp->index->name->content, + now, rq_qnick->content, cp->index->name->content, np->nick, np->ident, np->host->name->content, IsAccount(np)?"/":"", IsAccount(np)?np->authname:"", (retval == RQ_OK) ? "accepted" : "denied"); fflush(rq_logfd); @@ -367,11 +397,11 @@ int rqcmd_requestspamscan(void *user, int cargc, char **cargv) { return RQ_ERROR; } - snick = getnickbynick(RQ_SNICK); + snick = getnickbynick(rq_snick->content); - if (snick == NULL || findserver(RQ_SSERVER) < 0) { + if (snick == NULL || findserver(rq_sserver->content) < 0) { sendnoticetouser(rqnick, np, "Error: %s does not seem to be online. " - "Please try again later.", RQ_SNICK); + "Please try again later.", rq_snick->content); rq_failed++; @@ -382,7 +412,7 @@ int rqcmd_requestspamscan(void *user, int cargc, char **cargv) { shand = getnumerichandlefromchanhash(cp->users, snick->numeric); if (shand != NULL) { - sendnoticetouser(rqnick, np, "Error: %s is already on that channel.", RQ_SNICK); + sendnoticetouser(rqnick, np, "Error: %s is already on that channel.", rq_snick->content); rq_failed++; @@ -406,7 +436,7 @@ int rqcmd_requestspamscan(void *user, int cargc, char **cargv) { /* channel apparently doesn't have Q */ sendnoticetouser(rqnick, np, "Error: You need %s in order to be " - "able to request %s.", RQ_QNICK, RQ_SNICK); + "able to request %s.", rq_qnick->content, rq_snick->content); rq_failed++; diff --git a/request/request.h b/request/request.h index c962fa63..7ead343e 100644 --- a/request/request.h +++ b/request/request.h @@ -1,23 +1,8 @@ -#define RQ_TLZ "#twilightzone" - -#define RQ_QSERVER "CServe.quakenet.org" -#define RQ_QNICK "Q" - -#define RQ_SSERVER "services2.uk.quakenet.org" -#define RQ_SNICK "S" - -#define RQ_REQUEST_NICK "R" -#define RQ_REQUEST_USER "request" -#define RQ_REQUEST_HOST "request.quakenet.org" -#define RQ_REQUEST_REAL "Service Request v0.23" -#define RQ_REQUEST_AUTH "R" -#define RQ_REQUEST_AUTHID 1780711 +#include "../lib/sstring.h" #define RQU_ANY 0 #define RQU_OPER 1 -#define RQ_LOGFILE "logs/request.log" - #define RQ_OK 0 #define RQ_ERROR 1 #define RQ_UNKNOWN 2 @@ -27,4 +12,9 @@ extern int rq_success; extern FILE *rq_logfd; +/* config */ +extern sstring *rq_qserver, *rq_qnick, *rq_sserver, *rq_snick; +extern sstring *rq_nick, *rq_user, *rq_host, *rq_real, *rq_auth; +extern int rq_authid; + char *rq_longtoduration(unsigned long interval); diff --git a/request/sqrequest.c b/request/sqrequest.c index 1857b575..f2e06988 100644 --- a/request/sqrequest.c +++ b/request/sqrequest.c @@ -171,7 +171,7 @@ static void qr_result(requestrec *req, int outcome, char failcode, char *message strftime(now, sizeof(now), "%c", localtime(&now_ts)); fprintf(rq_logfd, "%s: request (%s) for %s (%d unique users, " "%d total users) from %s!%s@%s%s%s: Request was %s (%c).\n", now, - (req->what == QR_CSERVE) ? RQ_QNICK : RQ_SNICK, + (req->what == QR_CSERVE) ? rq_qnick->content : rq_snick->content, req->cip->name->content, unique, total, tnp->nick, tnp->ident, tnp->host->name->content, IsAccount(tnp)?"/":"", IsAccount(tnp)?tnp->authname:"", (outcome == QR_OK) ? "accepted" : "denied", failcode); @@ -182,10 +182,10 @@ static void qr_result(requestrec *req, int outcome, char failcode, char *message if (req->what == QR_SPAMSCAN) { /* Add S */ - if (!(snp=getnickbynick(RQ_SNICK))) { + if (!(snp=getnickbynick(rq_snick->content))) { sendnoticetouser(rqnick, tnp, "Cannot find %s on the network. " - "Please try your request again later.", RQ_SNICK); + "Please try your request again later.", rq_snick->content); free(req); return; @@ -193,7 +193,7 @@ static void qr_result(requestrec *req, int outcome, char failcode, char *message sendnoticetouser(rqnick, tnp, "Success! %s has been added to '%s' " "(contact #help if you require further assistance).", - RQ_SNICK, req->cip->name->content); + rq_snick->content, req->cip->name->content); /* auth */ user = (sstring *)getcopyconfigitem("request", "user", "R", 30); @@ -298,7 +298,7 @@ static int qr_checksize(chanindex *cip, int what, char *failcode) { /* make sure we can actually add Q */ if (what == QR_CSERVE) { - qbot = getnickbynick(RQ_QNICK); + qbot = getnickbynick(rq_qnick->content); if (!qbot) return 0; @@ -405,7 +405,7 @@ void qr_handle_notice(nick *sender, char *message) { int delrequest = 0, state, who; requestrec *nextreq; - if (!ircd_strcmp(sender->nick, RQ_QNICK) && nextqreq) { + if (!ircd_strcmp(sender->nick, rq_qnick->content) && nextqreq) { /* Message from Q */ if (!ircd_strcmp(message,"Done.")) { /* Q added the channel: delete from L and tell the user. */ @@ -431,7 +431,7 @@ void qr_handle_notice(nick *sender, char *message) { } } - if (!ircd_strcmp(sender->nick, RQ_QNICK)) { + if (!ircd_strcmp(sender->nick, rq_qnick->content)) { who = QR_Q; state = (who == QR_Q) ? rqstate : rlstate; nextreq = (who == QR_Q) ? nextreqq : nextreql; @@ -616,7 +616,7 @@ void qr_handle_notice(nick *sender, char *message) { qr_result(nextreq, QR_OK, '-', "OK"); } else { qr_result(nextreq, QR_FAILED, failcode, - "Error: Sorry, Your channel '%s' does not require %s. Please try again in a few days.", nextreq->cip->name->content, RQ_SNICK); + "Error: Sorry, Your channel '%s' does not require %s. Please try again in a few days.", nextreq->cip->name->content, rq_snick->content); qr_toosmall++; } @@ -763,7 +763,7 @@ int qr_requests(nick *rqnick, nick *sender, channel *cp, nick *qnick) { sendnoticetouser(rqnick, sender, "Checking your %s access in '%s'. " "This may take a while, please be patient...", - RQ_QNICK, cip->name->content); + rq_qnick->content, cip->name->content); return RQ_UNKNOWN; }