]> jfr.im git - irc/quakenet/newserv.git/commitdiff
sync R from D back into this branch
authorPaul <redacted>
Fri, 30 May 2008 18:35:58 +0000 (19:35 +0100)
committerPaul <redacted>
Fri, 30 May 2008 18:35:58 +0000 (19:35 +0100)
request/lrequest.c
request/lrequest.h
request/request.c
request/request.h
request/sqrequest.c
request/sqrequest.h

index ac1d53a074601ae053233e8cb1f026f5158f1a7f..a82ab4ce18be99f6f2a2864140f45f4212a15819 100644 (file)
@@ -15,7 +15,7 @@ int lr_floodattempts = 0;
 
 #define min(a,b) ((a > b) ? b : a)
 
-int lr_requestl(nick *svc, nick *np, channel *cp, nick *lnick) {
+int lr_requestl(nick *svc, nick *np, channel *cp, nick *qnick) {
   chanfix *cf;
   regop *rolist[LR_TOPX], *ro;
   int i, rocount;
@@ -70,26 +70,27 @@ int lr_requestl(nick *svc, nick *np, channel *cp, nick *lnick) {
     }
 
     sendnoticetouser(svc, np, "Sorry You do not meet the "
-          "requirements to request L. Please Try again in an hour. "
-          "(see http://www.quakenet.org/faq/faq.php?c=3&f=112 )");
+          "requirements to request %s. Please Try again in an hour. "
+          "(see http://www.quakenet.org/faq/faq.php?c=1&f=239#239 )", RQ_QNICK);
 
     lr_scoretoolow++;
 
     return RQ_ERROR;
   }
 
-  sendmessagetouser(svc, lnick, "addchan %s #%s %s", cp->index->name->content,
+  
+  sendmessagetouser(svc, qnick, "addchan %s #%s +jp upgrade %s", cp->index->name->content,
         np->authname, np->nick);
 
-  sendnoticetouser(svc, np, "Requirements met, L should be added. Contact #help"
-        " should further assistance be required.");
+  sendnoticetouser(svc, np, "Requirements met, %s should be added. Contact #help"
+        " should further assistance be required.", RQ_QNICK);
 
   return RQ_OK;
 }
 
 void lr_requeststats(nick *rqnick, nick *np) {
-  sendnoticetouser(rqnick, np, "- No registered ops (L):          %d", lr_noregops);
-  sendnoticetouser(rqnick, np, "- Score too low (L):              %d", lr_scoretoolow);
-  sendnoticetouser(rqnick, np, "- Not in top%d (L):                %d", LR_TOPX, lr_top5);
-  sendnoticetouser(rqnick, np, "- Floods (L):                     %d", lr_floodattempts);
+  sendnoticetouser(rqnick, np, "- No registered ops (Q):          %d", lr_noregops);
+  sendnoticetouser(rqnick, np, "- Score too low (Q):              %d", lr_scoretoolow);
+  sendnoticetouser(rqnick, np, "- Not in top%d (Q):                %d", LR_TOPX, lr_top5);
+  sendnoticetouser(rqnick, np, "- Floods (Q):                     %d", lr_floodattempts);
 }
index aa4a1eed472d4e22c7ff4ebe036f7c836bfe4ce1..4f0c1f9780135b077cec9136f151cc657eeece5a 100644 (file)
@@ -5,7 +5,7 @@
 
 #define LR_TOPX 5
 #define LR_CFSCORE 12 
-#define LR_MAXCHANLEN 29
+#define LR_MAXCHANLEN 89
 
 int lr_requestl(nick *svc, nick *np, channel *cp, nick *lnick);
 void lr_requeststats(nick *rqnick, nick *np);
index 14cdcb4918793209b3ecf44ee50f941ee68822d6..425110b5e941131e128893a7e2be8015c95f1183 100644 (file)
@@ -118,8 +118,8 @@ void _fini(void) {
 void rq_registeruser(void) {
   channel *cp;
 
-  rqnick = registerlocaluser(RQ_REQUEST_NICK, RQ_REQUEST_USER, RQ_REQUEST_HOST,
-                             RQ_REQUEST_REAL, RQ_REQUEST_AUTH,
+  rqnick = registerlocaluserwithuserid(RQ_REQUEST_NICK, RQ_REQUEST_USER, RQ_REQUEST_HOST,
+                             RQ_REQUEST_REAL, RQ_REQUEST_AUTH, 1780711,
                              UMODE_ACCOUNT | UMODE_SERVICE | UMODE_OPER,
                              rq_handler);
 
@@ -225,7 +225,7 @@ int rqcmd_showcommands(void *user, int cargc, char **cargv) {
   return 0;
 }
 
-int rq_genericrequestcheck(nick *np, char *channelname, channel **cp, nick **lnick, nick **qnick) {
+int rq_genericrequestcheck(nick *np, char *channelname, channel **cp, nick **qnick) {
   unsigned long *userhand;
   rq_block *block;
 
@@ -244,15 +244,6 @@ int rq_genericrequestcheck(nick *np, char *channelname, channel **cp, nick **lni
     return RQ_ERROR;
   }
 
-  *lnick = getnickbynick(RQ_LNICK);
-
-  if (*lnick == NULL || findserver(RQ_LSERVER) < 0) {
-    sendnoticetouser(rqnick, np, "Error: %s does not seem to be online. "
-          "Try again later.", RQ_LNICK);
-
-    return RQ_ERROR;
-  }
-
   *qnick = getnickbynick(RQ_QNICK);
 
   if (*qnick == NULL || findserver(RQ_QSERVER) < 0) {
@@ -325,8 +316,8 @@ int rq_genericrequestcheck(nick *np, char *channelname, channel **cp, nick **lni
 
 int rqcmd_request(void *user, int cargc, char **cargv) {
   nick *np = (nick*)user;
-  nick *lnick, *qnick;
-  unsigned long *lhand, *qhand;
+  nick *qnick;
+  unsigned long *qhand;
   channel *cp;
   int retval;
   time_t now_ts;
@@ -340,14 +331,12 @@ int rqcmd_request(void *user, int cargc, char **cargv) {
 
   rq_count++;
 
-  if (rq_genericrequestcheck(np, cargv[0], &cp, &lnick, &qnick) == RQ_ERROR) {
+  if (rq_genericrequestcheck(np, cargv[0], &cp, &qnick) == RQ_ERROR) {
     rq_failed++;
 
     return RQ_ERROR;
   }
 
-  lhand = getnumerichandlefromchanhash(cp->users, lnick->numeric);
-
   qhand = getnumerichandlefromchanhash(cp->users, qnick->numeric);
 
   if (qhand != NULL) {
@@ -360,30 +349,15 @@ int rqcmd_request(void *user, int cargc, char **cargv) {
 
   retval = RQ_ERROR;
 
-  if (lhand == NULL && qhand == NULL) {
-    /* try 'instant' Q request */
-    retval = qr_instantrequestq(np, cp);
-  }
-
-  if (retval == RQ_ERROR) {
-    if (lhand == NULL) {
-      /* user 'wants' L */
-
-      retval = lr_requestl(rqnick, np, cp, lnick);
+  retval = lr_requestl(rqnick, np, cp, qnick);
 
-      if (rq_logfd != NULL) {
-        now[0] = '\0';
-        now_ts = time(NULL);
-        strftime(now, sizeof(now), "%c", localtime(&now_ts));
+  if (rq_logfd != NULL) {
+    now[0] = '\0';
+    now_ts = time(NULL);
+    strftime(now, sizeof(now), "%c", localtime(&now_ts));
 
-        fprintf(rq_logfd, "%s: request (%s) for %s from %s: Request was %s.\n", now, RQ_LNICK, cp->index->name->content, np->nick, (retval == RQ_OK) ? "accepted" : "denied");
-        fflush(rq_logfd);
-      }
-    } else {
-      /* user 'wants' Q */
-
-      retval = qr_requestq(rqnick, np, cp, lnick, qnick);
-    }
+    fprintf(rq_logfd, "%s: request (%s) for %s from %s: Request was %s.\n", now, RQ_QNICK, cp->index->name->content, np->nick, (retval == RQ_OK) ? "accepted" : "denied");
+    fflush(rq_logfd);
   }
 
   if (retval == RQ_ERROR)
@@ -397,8 +371,8 @@ int rqcmd_request(void *user, int cargc, char **cargv) {
 int rqcmd_requestspamscan(void *user, int cargc, char **cargv) {
   nick *np = (nick*)user;
   channel *cp;
-  nick *lnick, *qnick, *snick;
-  unsigned long *lhand, *qhand, *shand;
+  nick *qnick, *snick;
+  unsigned long *qhand, *shand;
   int retval;
 
   if (cargc < 1) {
@@ -409,7 +383,7 @@ int rqcmd_requestspamscan(void *user, int cargc, char **cargv) {
 
   rq_count++;
 
-  if (rq_genericrequestcheck(np, cargv[0], &cp, &lnick, &qnick) == RQ_ERROR) {
+  if (rq_genericrequestcheck(np, cargv[0], &cp, &qnick) == RQ_ERROR) {
     rq_failed++;
 
     return RQ_ERROR;
@@ -437,13 +411,12 @@ int rqcmd_requestspamscan(void *user, int cargc, char **cargv) {
     return RQ_ERROR;
   }
 
-  /* we need either L or Q */
-  lhand = getnumerichandlefromchanhash(cp->users, lnick->numeric);
+  /* we need Q */
   qhand = getnumerichandlefromchanhash(cp->users, qnick->numeric);
 
-  if (lhand || qhand) {
+  if (qhand) {
     /* great, now try to request */
-    retval = qr_requests(rqnick, np, cp, lnick, qnick);
+    retval = qr_requests(rqnick, np, cp, qnick);
     
     if (retval == RQ_OK)
       rq_success++;
@@ -452,10 +425,10 @@ int rqcmd_requestspamscan(void *user, int cargc, char **cargv) {
       
       return retval;
   } else {
-    /* channel apparently doesn't have L or Q */
+    /* channel apparently doesn't have Q */
     
-   sendnoticetouser(rqnick, np, "Error: You need %s or %s in order to be "
-        "able to request %s.", RQ_LNICK, RQ_QNICK, RQ_SNICK);
+   sendnoticetouser(rqnick, np, "Error: You need %s in order to be "
+        "able to request %s.", RQ_QNICK, RQ_SNICK);
 
     rq_failed++;
 
index eba96c2d69cc32eaf872f15b5cea95a939bdb636..f12707495050f2ea80552c0aff8abf06a68b62dc 100644 (file)
@@ -1,12 +1,9 @@
 #define RQ_TLZ "#twilightzone"
 
-#define RQ_LSERVER "lightweight.quakenet.org"
-#define RQ_LNICK "L"
-
 #define RQ_QSERVER "CServe.quakenet.org"
 #define RQ_QNICK "Q"
 
-#define RQ_SSERVER "services.no.quakenet.org"
+#define RQ_SSERVER "services.de.quakenet.org"
 #define RQ_SNICK "S"
 
 #define RQ_REQUEST_NICK "R"
index 902872e56f8dc6139c409f340cbf15cd25ef825e..00ae73b487a242879469c132549d44edfb4a2db2 100644 (file)
@@ -175,31 +175,7 @@ static void qr_result(requestrec *req, int outcome, char failcode, char *message
   }
   
   if (outcome==QR_OK) {
-    if (req->what == QR_CSERVE) {
-      /* Delete L, add Q.  Check that they both exist first, though. */
-
-      if (!(lnp=getnickbynick(RQ_LNICK)) || !(qnp=getnickbynick(RQ_QNICK))) {
-        sendnoticetouser(rqnick, tnp,
-                         "Error: Cannot find %s and %s on the network. "
-                         "Please request again later.", RQ_LNICK, RQ_QNICK);
-        free(req);
-        return;
-      }
-
-      if ( !IsAccount(lnp) ) {
-        sendnoticetouser(rqnick, tnp, "Internal Error Occured: L is not authed. Contact #help");
-        free(req);
-        return;
-      } 
-      /* /msg Q ADDCHAN <channel> <flags> <owners nick> <channeltype> */
-      sendmessagetouser(rqnick, qnp, "ADDCHAN %s +ap #%s upgrade",
-                        req->cip->name->content,
-                        np->authname);
-  
-      sendnoticetouser(rqnick, tnp, "Adding %s to channel, please wait...",
-                        RQ_QNICK);
-    } else if (req->what == QR_SPAMSCAN) {
+    if (req->what == QR_SPAMSCAN) {
       /* Add S */
 
       if (!(snp=getnickbynick(RQ_SNICK))) {
@@ -423,41 +399,17 @@ void qr_handle_notice(nick *sender, char *message) {
   int delrequest = 0, state, who;
   requestrec *nextreq;
 
-/*  logcp = findchannel("#qnet.request");
-  
-  if (logcp)
-    sendmessagetochannel(rqnick, logcp, "%s: %s - %d %d %x %x", sender->nick, message, rlstate, rqstate, nextreql, nextreqq);
-*/
   if (!ircd_strcmp(sender->nick, RQ_QNICK) && nextqreq) {
     /* Message from Q */
     if (!ircd_strcmp(message,"Done.")) {
       /* Q added the channel: delete from L and tell the user. */
       /* If L has conspired to vanish between the request and the outcome,
        * we have a chan with Q and L... too bad. */
-
-      if ((np=getnickbynick(RQ_LNICK))) {
-        sendmessagetouser(rqnick, np, "SENDCHANLEV %s %s",
-                          nextqreq->cip->name->content, RQ_QNICK);
-
-        sendmessagetouser(rqnick, np, "DELCHAN %s",
-                          nextqreq->cip->name->content);
-      }
-
-      if ((np=getnickbynumeric(nextqreq->reqnumeric))) {
-        sendnoticetouser(rqnick, np, "Request completed. %s added.", RQ_QNICK);
-      }
       
       delrequest = 1;
     } else if (!ircd_strcmp(message,"That channel already exists.")) {
-      if ((np=getnickbynumeric(nextqreq->reqnumeric))) {
-        sendnoticetouser(rqnick, np,
-                         "Your channel '%s' appears to have %s already "
-                         "(it may be suspended).", nextqreq->cip->name->content, RQ_QNICK);
-
-        qr_suspended++;
         
         delrequest = 1;
-      }
     }
 
     /* For either of the two messages above we want to delete the request
@@ -473,8 +425,8 @@ void qr_handle_notice(nick *sender, char *message) {
     }
   }
 
-  if (!ircd_strcmp(sender->nick, RQ_LNICK) || !ircd_strcmp(sender->nick, RQ_QNICK)) {
-    who = !ircd_strcmp(sender->nick, RQ_LNICK) ? QR_L : QR_Q;
+  if (!ircd_strcmp(sender->nick, RQ_QNICK)) {
+    who = QR_Q;
     state = (who == QR_Q) ? rqstate : rlstate;
     nextreq = (who == QR_Q) ? nextreqq : nextreql;
 
@@ -490,7 +442,6 @@ void qr_handle_notice(nick *sender, char *message) {
           (!ircd_strncmp(message,"Known users on",14) && who == QR_Q)
         ) {
           /* Looks like the right message.  Let's find a channel name */
-
           for (ch=message;*ch;ch++)
             if (*ch=='#')
               break;
@@ -504,12 +455,11 @@ void qr_handle_notice(nick *sender, char *message) {
           /* chop off any remaining words */
           chop = ch;
           while (*(chop++)) {
-            if (*chop == ' ') {
+            if (*chop == ' ' || *chop == ':') {
               *chop = '\0';
               break;
             }
           }
-
           if (!(cip=findchanindex(ch))) {
             Error("qrequest",ERR_WARNING,
                   "Unable to find channel from L/Q message: %s",ch);
@@ -523,7 +473,6 @@ void qr_handle_notice(nick *sender, char *message) {
               rlstate = QRLstate_AWAITINGUSER;
             else
               rqstate = QRLstate_AWAITINGUSER;
-
             return;
           } else {
             /* Uh-oh, not the channel we wanted.  Something is fucked
@@ -587,7 +536,6 @@ void qr_handle_notice(nick *sender, char *message) {
           /* Oh dear, we got to the end of the chanlev in this state.
            * This means that we didn't find the user.
            */
-
           qr_result(nextreq, QR_FAILED, 'X', 
                     "Error: You are not known on %s.",
                     nextreq->cip->name->content);
@@ -632,13 +580,28 @@ void qr_handle_notice(nick *sender, char *message) {
             /* This is not the user you are looking for */
             return;
           }
-
           /* Check for owner flag.  Both branches of this if will
            * take the request off the list, one way or the other. */
-          if (strchr(ch, 'n')) {
+
+         /* chop off any remaining words */
+         chop = ch;
+         while (*(chop++)) {
+           if (*chop != ' ' ) {
+             break;
+           }
+        }
+         /* chop off any remaining words */
+         ch = chop;
+         while (*(chop++)) {
+           if (*chop == ' ' || *chop == ':') {
+             *chop = '\0';
+             break;
+           }
+         }
+
+         if (strchr(ch, 'n')) {
             char failcode;
             /* They iz teh +n! */
-            
             /* Note: We're checking for blocks kind of late, so the request
                system gets a chance to send other error messages first (like
               'no chanstats', 'not known on channel', etc.). This is required
@@ -646,15 +609,9 @@ void qr_handle_notice(nick *sender, char *message) {
             if (qr_checksize(nextreq->cip, nextreq->what, &failcode) && !qr_blockcheck(nextreq)) {
               qr_result(nextreq, QR_OK, '-', "OK");
             } else {
-              if (nextreq->what == QR_CSERVE) {
-                qr_result(nextreq, QR_FAILED, failcode,
-                          "Error: Sorry, Your channel '%s' does not meet the requirements "
-                          "for %s. Please continue to use %s.", nextreq->cip->name->content, RQ_QNICK, RQ_LNICK);                          
-              } 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);
-              }
-
+       
               qr_toosmall++;
             }
           } else {
@@ -706,57 +663,6 @@ void qr_handle_notice(nick *sender, char *message) {
  */
 
 int qr_requestq(nick *rqnick, nick *sender, channel *cp, nick *lnick, nick *qnick) {
-  chanindex *cip = cp->index;
-
-  /* Check:
-   *  - we have some form of channel stats for the channel
-   *
-   * Note that the actual channel stats will not be checked
-   * until we're sure the user has +n on the channel.
-   */
-
-  if (rq_isspam(sender)) {
-      sendnoticetouser(rqnick, sender, "Error: Do not flood the request system."
-            " Try again in %s.", rq_longtoduration(rq_blocktime(sender)));
-    
-      return RQ_ERROR;
-  }
-
-  if (!cip->exts[csext]) {
-    sendnoticetouser(rqnick, sender,
-                     "Error: No historical record exists for %s.",
-                     cip->name->content);
-
-    qr_nohist++;
-
-    return RQ_ERROR;
-  }
-
-  /* Request stats from L */
-  sendmessagetouser(rqnick, lnick, "CHANLEV %s", cip->name->content);
-
-  /* Sort out a request record */
-  if (lastreql) {
-    lastreql->next = (requestrec *)malloc(sizeof(requestrec));
-    lastreql=lastreql->next;
-  } else {
-    lastreql=nextreql=(requestrec *)malloc(sizeof(requestrec));
-  }
-
-  lastreql->next = NULL;
-  lastreql->cip = cip;
-  lastreql->what = QR_CSERVE;
-  lastreql->who = QR_L;
-  lastreql->reqnumeric = sender->numeric;
-
-  if (rlstate == QRLstate_IDLE)
-    rlstate = QRLstate_AWAITINGCHAN;
-
-  sendnoticetouser(rqnick, sender,
-                   "Checking your %s access. "
-                   "This may take a while, please be patient...", RQ_LNICK);
-                   
-  /* we don't know yet whether the request was successful */
   return RQ_UNKNOWN;
 }
 
@@ -816,7 +722,7 @@ int qr_instantrequestq(nick *sender, channel *cp) {
   return RQ_OK;
 }
 
-int qr_requests(nick *rqnick, nick *sender, channel *cp, nick *lnick, nick *qnick) {
+int qr_requests(nick *rqnick, nick *sender, channel *cp, nick *qnick) {
   chanindex *cip = cp->index;
   int who = 0;
   requestrec *nextreq, *lastreq;
@@ -829,16 +735,7 @@ int qr_requests(nick *rqnick, nick *sender, channel *cp, nick *lnick, nick *qnic
   }
 
   /* check which service is on the channel */
-  if (getnumerichandlefromchanhash(cp->users, lnick->numeric) != NULL) {
-    /* we've found L */
-    who = QR_L;
-
-    /* Request stats from L */
-    sendmessagetouser(rqnick, lnick, "CHANLEV %s", cip->name->content);
-
-    if (rlstate == QRLstate_IDLE)
-      rlstate = QRLstate_AWAITINGCHAN;
-  } else if (getnumerichandlefromchanhash(cp->users, qnick->numeric) != NULL) {
+  if (getnumerichandlefromchanhash(cp->users, qnick->numeric) != NULL) {
     /* we've found Q */
     who = QR_Q;
 
@@ -849,8 +746,8 @@ int qr_requests(nick *rqnick, nick *sender, channel *cp, nick *lnick, nick *qnic
       rqstate = QRLstate_AWAITINGCHAN;
   } /* 'else' cannot happen as R has already checked whether the user has L or Q */
 
-  lastreq = (who == QR_Q) ? lastreqq : lastreql;
-  nextreq = (who == QR_Q) ? nextreqq : nextreql;
+  lastreq = lastreqq;
+  nextreq = nextreqq;
 
   /* Sort out a request record */
   if (lastreq) {
@@ -865,18 +762,13 @@ int qr_requests(nick *rqnick, nick *sender, channel *cp, nick *lnick, nick *qnic
   lastreq->what = QR_SPAMSCAN;
   lastreq->reqnumeric = sender->numeric;
 
-  if (who == QR_Q) {
-    nextreqq = nextreq;
-    lastreqq = lastreq;
-  } else {
-    nextreql = nextreq;
-    lastreql = lastreq;
-  }
+  nextreqq = nextreq;
+  lastreqq = lastreq;
 
-   sendnoticetouser(rqnick, sender,
+  sendnoticetouser(rqnick, sender,
                    "Checking your %s access. "
                    "This may take a while, please be patient...",
-                   who == QR_Q ? RQ_QNICK : RQ_LNICK);
+                   RQ_QNICK);
 
   return RQ_UNKNOWN;
 }
@@ -910,11 +802,11 @@ void qr_finirequest(void) {
 }
 
 void qr_requeststats(nick *rqnick, nick *np) {
-  sendnoticetouser(rqnick, np, "- Suspended (Q):                  %d", qr_suspended);
-  sendnoticetouser(rqnick, np, "- No chanstats (Q/S):             %d", qr_nohist);
-  sendnoticetouser(rqnick, np, "- Too small (Q/S):                %d", qr_toosmall);
-  sendnoticetouser(rqnick, np, "- User was not on chanlev (Q/S):  %d", qr_nochanlev);
-  sendnoticetouser(rqnick, np, "- User was not the owner (Q/S):   %d", qr_notowner);
+  sendnoticetouser(rqnick, np, "- Suspended (S):                  %d", qr_suspended);
+  sendnoticetouser(rqnick, np, "- No chanstats (S):             %d", qr_nohist);
+  sendnoticetouser(rqnick, np, "- Too small (S):                %d", qr_toosmall);
+  sendnoticetouser(rqnick, np, "- User was not on chanlev (S):  %d", qr_nochanlev);
+  sendnoticetouser(rqnick, np, "- User was not the owner (S):   %d", qr_notowner);
   sendnoticetouser(rqnick, np, "- A:                              %d", qr_a);
   sendnoticetouser(rqnick, np, "- B:                              %d", qr_b);
   sendnoticetouser(rqnick, np, "- C:                              %d", qr_c);
index afe7b3621c8fd5b735d51e9c5ee9ec67709bc852..100b25bbfefcd30bb8ba2edd157ff5deb65ede3c 100644 (file)
@@ -2,7 +2,7 @@
 #include "../channel/channel.h"
 
 #define QR_REQUIREDSIZE_CSERVE   15 
-#define QR_REQUIREDSIZE_SPAMSCAN 120
+#define QR_REQUIREDSIZE_SPAMSCAN 75 
 #define QR_TOPX                  5
 #define QR_AUTHEDPCT_SPAMSCANMIN 25
 #define QR_AUTHEDPCT_SCALE       35 
@@ -21,6 +21,6 @@ void qr_initrequest(void);
 void qr_finirequest(void);
 int qr_requestq(nick *rqnick, nick *sender, channel *cp, nick *lnick, nick *qnick);
 int qr_instantrequestq(nick *sender, channel *cp);
-int qr_requests(nick *rqnick, nick *sender, channel *cp, nick *lnick, nick *qnick);
+int qr_requests(nick *rqnick, nick *sender, channel *cp, nick *qnick);
 void qr_requeststats(nick *rqnick, nick *np);
 void qr_handle_notice(nick *sender, char *message);