]> jfr.im git - irc/quakenet/newserv.git/blobdiff - chanserv/usercmds/unsuspenduser.c
fix bug in G stats
[irc/quakenet/newserv.git] / chanserv / usercmds / unsuspenduser.c
index cb6dacc02d0ad3cb89d64717eef7bb365f46d2c5..0b3089167f2ce4022052292c4b45a86560cd6d03 100644 (file)
@@ -3,10 +3,12 @@
  *
  * CMDNAME: unsuspenduser
  * CMDLEVEL: QCMD_OPER
- * CMDARGS: 1
+ * CMDARGS: 2
  * CMDDESC: Unsuspend a user.
  * CMDFUNC: csu_dounsuspenduser
  * CMDPROTO: int csu_dounsuspenduser(void *source, int cargc, char **cargv);
+ * CMDHELP: Usage: unsuspenduser <username> <reason>
+ * CMDHELP: Unsuspends the specified user.
  */
 
 #include "../chanserv.h"
 int csu_dounsuspenduser(void *source, int cargc, char **cargv) {
   nick *sender=source;
   reguser *rup=getreguserfromnick(sender);
-  reguser *vrup;
+  reguser *vrup, *suspendedby;
   char action[100];
+  char *csuspendedby, *csuspendreason;
+  char *unsuspendreason;
   
   if (!rup)
     return CMD_ERROR;
   
-  if (cargc < 1) {
+  if (cargc < 2) {
     chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "unsuspenduser");
     return CMD_ERROR;
   }
-  
+
+  unsuspendreason = cargv[1];
+  if(!checkreason(sender, unsuspendreason))
+    return CMD_ERROR;
+
   if (cargv[0][0] == '#') {
     if (!(vrup=findreguserbynick(&cargv[0][1]))) {
       chanservstdmessage(sender, QM_UNKNOWNUSER, &cargv[0][1]);
@@ -56,35 +64,39 @@ int csu_dounsuspenduser(void *source, int cargc, char **cargv) {
   if (UHasOperPriv(vrup) && !UHasAdminPriv(rup)) {
     snprintf(action, 99, "unsuspenduser on %s", vrup->username);
     chanservstdmessage(sender, QM_NOACCESS, action);
-    chanservwallmessage("%s (%s) FAILED to unsuspend %s", sender->nick, rup->username, vrup->username);
+    chanservwallmessage("%s (%s) FAILED to UNSUSPENDUSER %s", sender->nick, rup->username, vrup->username);
+    cs_log(sender, "UNSUSPENDUSER FAILED (not admin) %s", vrup->username);
     return CMD_ERROR;
   }
   
   if (UIsDelayedGline(vrup)) {
-    strcpy(action, "removed delayed gline on");
+    strcpy(action, "delayed gline");
   }
   else if (UIsGline(vrup)) {
-    strcpy(action, "removed instant gline on");
+    strcpy(action, "instant gline");
   }
   else if (UIsSuspended(vrup)) {
-    strcpy(action, "unsuspended");
-  }
-  else if (UIsNeedAuth(vrup)) {
-    strcpy(action, "enabled");
+    strcpy(action, "normal");
   }
   else {
-    chanservsendmessage(sender, "Unknown suspend type encountered.");
+    chanservsendmessage(sender, "Unknown suspension type encountered.");
     return CMD_ERROR;
   }
-  
-  vrup->flags&=(~(QUFLAG_GLINE|QUFLAG_DELAYEDGLINE|QUFLAG_SUSPENDED|QUFLAG_NEEDAUTH));
+
+  suspendedby = findreguserbyID(vrup->suspendby);
+  csuspendedby = suspendedby?suspendedby->username:"(unknown)";
+  csuspendreason = vrup->suspendreason?vrup->suspendreason->content:"(no reason)";
+
+  chanservwallmessage("%s (%s) used UNSUSPENDUSER on %s, type: %s, suspended by: %s, suspension reason: %s, unsuspend reason: %s", sender->nick, rup->username, vrup->username, action, csuspendedby, csuspendreason, unsuspendreason);
+  cs_log(sender,"UNSUSPENDUSER %s (%s, by: %s reason: %s), reason: %s", vrup->username, action, csuspendedby, csuspendreason, unsuspendreason);
+
+  vrup->flags&=(~(QUFLAG_GLINE|QUFLAG_DELAYEDGLINE|QUFLAG_SUSPENDED));
   vrup->suspendby=0;
   vrup->suspendexp=0;
   freesstring(vrup->suspendreason);
   vrup->suspendreason=0;
   csdb_updateuser(vrup);
   
-  chanservwallmessage("%s (%s) %s %s", sender->nick, rup->username, action, vrup->username);
   chanservstdmessage(sender, QM_DONE);
   return CMD_OK;
 }