]> jfr.im git - irc/quakenet/newserv.git/blobdiff - chanserv/chancmds/op.c
fix bug in G stats
[irc/quakenet/newserv.git] / chanserv / chancmds / op.c
index 681aee2ac9532d0507411edb86f1d5c8166f17a5..b4a9cc37e7f61c0d63f33c95bc7744947d6a4f7b 100644 (file)
@@ -7,7 +7,7 @@
  * CMDDESC: Ops you or other users on channel(s).
  * CMDFUNC: csc_doop
  * CMDPROTO: int csc_doop(void *source, int cargc, char **cargv);
- * CMDHELP: Usage: OP [<channel> [<user1> [<user2> [...]]]
+ * CMDHELP: Usage: OP [<channel> [<user1> [<user2> [...]]]]
  * CMDHELP: Ops you on one or more channels, or ops other named users on a given channel.
  * CMDHELP: This command cannot be used to op users who are otherwise prevented from getting
  * CMDHELP: ops, e.g. via the +d chanlev flag (see CHANLEV) or bitch mode (see CHANFLAGS).
@@ -36,6 +36,7 @@
 int csc_doop(void *source, int cargc, char **cargv) {
   nick *sender=source, *np;
   reguser *rup=getreguserfromnick(sender);
+  reguser *srup=rup;
   chanindex *cip;
   regchan *rcp=NULL;
   regchanuser *rcup;
@@ -43,8 +44,8 @@ int csc_doop(void *source, int cargc, char **cargv) {
   unsigned long *lp;
   int i;
   modechanges changes;
-  int donotice=0;
-  char buf[512], bufpos=0;
+  int donotice=0, bufpos=0;
+  char buf[512];
 
   if (!rup)
     return CMD_ERROR;
@@ -64,6 +65,7 @@ int csc_doop(void *source, int cargc, char **cargv) {
            localsetmodeinit(&changes, ca[i], chanservnick);
            localdosetmode_nick(&changes, sender, MC_OP);
            localsetmodeflush(&changes,1);
+           cs_logchanop(rcp, sender->nick, rup);
          }
        }
       }
@@ -79,6 +81,12 @@ int csc_doop(void *source, int cargc, char **cargv) {
     return CMD_ERROR;
 
   rcp=cip->exts[chanservext];
+  
+  /* If the channel doesn't currently exist, forget it. */
+  if (!cip->channel) { 
+    chanservstdmessage(sender, QM_EMPTYCHAN, cip->name->content);  
+    return CMD_ERROR;
+  }
 
   if (cargc==1) {
     /* Only one arg: "op me" */
@@ -88,6 +96,7 @@ int csc_doop(void *source, int cargc, char **cargv) {
     localsetmodeinit(&changes, cip->channel, chanservnick);
     localdosetmode_nick(&changes, sender, MC_OP);
     localsetmodeflush(&changes,1);
+    cs_logchanop(rcp, sender->nick, srup);
 
     chanservstdmessage(sender, QM_DONE);
     return CMD_OK;
@@ -130,10 +139,11 @@ int csc_doop(void *source, int cargc, char **cargv) {
 
     bufpos += sprintf(buf+bufpos,"%s%s",bufpos?", ":"",np->nick);
     localdosetmode_nick(&changes, np, MC_OP);
+    cs_logchanop(rcp, np->nick, srup);
   }
 
   if (donotice && bufpos) {
-    sendopnoticetochannel(chanservnick, cip->channel, "%s opped %s", sender, buf);
+    sendopnoticetochannel(chanservnick, cip->channel, "%s opped %s", sender->nick, buf);
   }
       
   localsetmodeflush(&changes, 1);