]> jfr.im git - irc/quakenet/newserv.git/blobdiff - chanserv/usercmds/deluser.c
CHANSERV: more checks on lastchannelID / lastuserID
[irc/quakenet/newserv.git] / chanserv / usercmds / deluser.c
index 7db62f4f98bc739436db26ea4f222f9b19d77570..d6f6595e9c89d8bfd42e04819b64f2eb748f8c79 100644 (file)
@@ -7,8 +7,9 @@
  * CMDDESC: Removes a user from the bot.
  * CMDFUNC: csu_dodeluser
  * CMDPROTO: int csu_dodeluser(void *source, int cargc, char **cargv);
- * CMDHELP: Usage: deluser <username>
+ * CMDHELP: Usage: deluser <username> <reason>
  * CMDHELP: Removes the specified username from the bot.
+ * CMDHELP: A reason is required and will be broadcasted.
  */
 
 #include "../chanserv.h"
 int csu_dodeluser(void *source, int cargc, char **cargv) {
   nick *sender=source;
   reguser *rup=getreguserfromnick(sender), *target;
+  char *reason;
 
   if (!rup)
     return CMD_ERROR;
   
-  if (cargc<1) {
+  if (cargc<2) {
     chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "deluser");
     return CMD_ERROR;
   }
 
+  reason = cargv[1];
+  if(!checkreason(sender, reason))
+    return CMD_ERROR;
+
   if (!(target=findreguser(sender, cargv[0])))
     return CMD_ERROR;
-  
-  if(UHasHelperPriv(target)) {
-    cs_log(sender,"DELUSER FAILED username %s (%s)",target->username,cargc>1?cargv[1]:"");
-    chanservwallmessage("%s (%s) just FAILED using DELUSER on %s (%s)", sender->nick, rup->username, target->username, cargc>1?cargv[1]:"");
+
+  if(target->ID == lastuserID) {
+    chanservsendmessage(sender, "Sorry, can't delete last user -- wait a while and try again.");
+    return CMD_ERROR;
+  }
+
+  if(UHasStaffPriv(target)) {
+    cs_log(sender,"DELUSER FAILED username %s (reason: %s)",target->username,reason);
+    chanservwallmessage("%s (%s) just FAILED using DELUSER on %s (reason: %s)", sender->nick, rup->username, target->username, reason);
     chanservsendmessage(sender, "Sorry, that user is privileged.");
     return CMD_ERROR;
   }
 
-  cs_log(sender,"DELUSER OK username %s (%s)",target->username,cargc>1?cargv[1]:"");
-  chanservwallmessage("%s (%s) just used DELUSER on %s (%s)", sender->nick, rup->username, target->username, cargc>1?cargv[1]:"");
+  cs_log(sender,"DELUSER OK username %s (reason: %s)",target->username,reason);
+  chanservwallmessage("%s (%s) just used DELUSER on %s (reason: %s)", sender->nick, rup->username, target->username, reason);
 
   cs_removeuser(target);