*
* 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]);
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;
}