]> jfr.im git - irc/quakenet/newserv.git/commitdiff
request was not checking the return code of getnickext, which really broke Z, added...
authorChris Porter <redacted>
Sun, 4 Nov 2007 02:41:18 +0000 (03:41 +0100)
committerChris Porter <redacted>
Sun, 4 Nov 2007 02:41:18 +0000 (03:41 +0100)
request/request.c
request/request_block.c
request/request_block.h

index d2274776cd039a5b2c5aa67d13e21577f13304ea..14cdcb4918793209b3ecf44ee50f941ee68822d6 100644 (file)
@@ -49,7 +49,14 @@ int rq_blocked = 0;
 /* log fd */
 FILE *rq_logfd;
 
+static int extloaded = 0;
+
 void _init(void) {
+  if(!rq_initblocks())
+    return;
+
+  extloaded = 1;
+
   rqcommands = newcommandtree();
 
   addcommandtotree(rqcommands, "showcommands", RQU_ANY, 1, &rqcmd_showcommands);
@@ -67,7 +74,6 @@ void _init(void) {
   addcommandtotree(rqcommands, "changelev", RQU_OPER, 2, &rqcmd_changelev);
   addcommandtotree(rqcommands, "userlist", RQU_OPER, 1, &rqcmd_userlist);
   
-  rq_initblocks();
   qr_initrequest();
   ru_load();
 
@@ -77,6 +83,9 @@ void _init(void) {
 }
 
 void _fini(void) {
+  if(!extloaded)
+    return;
+
   deregisterlocaluser(rqnick, NULL);
 
   deletecommandfromtree(rqcommands, "showcommands", &rqcmd_showcommands);
@@ -271,8 +280,18 @@ int rq_genericrequestcheck(nick *np, char *channelname, channel **cp, nick **lni
   block = rq_findblock(channelname);
 
   if (block != NULL) {
-    sendnoticetouser(rqnick, np, "Error: You are not allowed to request a "
+     /* only say when block expires if <7 days */
+     if ( block->expires < getnettime() + 3600 * 24 * 7) {
+       sendnoticetouser(rqnick, np, "Error: You are not allowed to request a "
+            "service to this channel. Keep waiting for at least %s before you try again.",
+            rq_longtoduration(block->expires - getnettime()));
+       /* give them another 5 minutes to think about it */
+       block->expires += 300;
+       rq_saveblocks();
+     } else {
+       sendnoticetouser(rqnick, np, "Error: You are not allowed to request a "
           "service to this channel.");
+     }
     sendnoticetouser(rqnick, np, "Reason: %s", block->reason->content);
 
     rq_blocked++;
index 40d7bc859fecd9e49f318e7560ecb32cea7948b2..fa7f59de0be26d16ad4cb426452563a38a1b2cb7 100644 (file)
@@ -15,7 +15,11 @@ int rq_loading;
 
 void rqhook_lostnick(int hook, void *arg);
 
-void rq_initblocks(void) {
+int rq_initblocks(void) {
+  rqnext = registernickext("request");
+  if(rqnext < 0)
+    return 0;
+
   array_init(&rqblocks, sizeof(rq_block));
   array_setlim1(&rqblocks, 5);
   array_setlim2(&rqblocks, 20);
@@ -29,7 +33,7 @@ void rq_initblocks(void) {
 
   registerhook(HOOK_NICK_LOSTNICK, &rqhook_lostnick);
 
-  rqnext = registernickext("request");
+  return 1;
 }
 
 void rq_finiblocks(void) {
index dac6463416c7ac3e3f1d600610f0918ee034facc..91f68a2b595c2c20df2391b0f07ef8e91eb227c8 100644 (file)
@@ -24,7 +24,7 @@ extern array rqblocks;
 #define RQ_SPAMCOUNT 5
 #define RQ_SPAMBLOCK 3600
 
-void rq_initblocks(void);
+int rq_initblocks(void);
 void rq_finiblocks(void);
 
 int rq_loadblocks(void);