]> jfr.im git - irc/quakenet/newserv.git/blob - chanserv/usercmds/unsuspenduser.c
846fc346cc9c01e47ea81e6c288448956077398d
[irc/quakenet/newserv.git] / chanserv / usercmds / unsuspenduser.c
1 /* Automatically generated by refactor.pl.
2 *
3 *
4 * CMDNAME: unsuspenduser
5 * CMDLEVEL: QCMD_OPER
6 * CMDARGS: 1
7 * CMDDESC: Unsuspend a user.
8 * CMDFUNC: csu_dounsuspenduser
9 * CMDPROTO: int csu_dounsuspenduser(void *source, int cargc, char **cargv);
10 * CMDHELP: Usage: unsuspenduser <username>
11 * CMDHELP: Unsuspends the specified user.
12 */
13
14 #include "../chanserv.h"
15 #include "../../lib/irc_string.h"
16 #include <stdio.h>
17 #include <string.h>
18
19 int csu_dounsuspenduser(void *source, int cargc, char **cargv) {
20 nick *sender=source;
21 reguser *rup=getreguserfromnick(sender);
22 reguser *vrup;
23 char action[100];
24
25 if (!rup)
26 return CMD_ERROR;
27
28 if (cargc < 1) {
29 chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "unsuspenduser");
30 return CMD_ERROR;
31 }
32
33 if (cargv[0][0] == '#') {
34 if (!(vrup=findreguserbynick(&cargv[0][1]))) {
35 chanservstdmessage(sender, QM_UNKNOWNUSER, &cargv[0][1]);
36 return CMD_ERROR;
37 }
38 }
39 else {
40 nick *np;
41
42 if (!(np=getnickbynick(cargv[0]))) {
43 chanservstdmessage(sender, QM_UNKNOWNUSER, cargv[0]);
44 return CMD_ERROR;
45 }
46
47 if (!(vrup=getreguserfromnick(np)) && sender) {
48 chanservstdmessage(sender, QM_USERNOTAUTHED, cargv[0]);
49 return CMD_ERROR;
50 }
51 }
52
53 if (!UHasSuspension(vrup)) {
54 chanservstdmessage(sender, QM_USERNOTSUSPENDED, cargv[0]);
55 return CMD_ERROR;
56 }
57
58 if (UHasOperPriv(vrup) && !UHasAdminPriv(rup)) {
59 snprintf(action, 99, "unsuspenduser on %s", vrup->username);
60 chanservstdmessage(sender, QM_NOACCESS, action);
61 chanservwallmessage("%s (%s) FAILED to unsuspend %s", sender->nick, rup->username, vrup->username);
62 return CMD_ERROR;
63 }
64
65 if (UIsDelayedGline(vrup)) {
66 strcpy(action, "removed delayed gline on");
67 }
68 else if (UIsGline(vrup)) {
69 strcpy(action, "removed instant gline on");
70 }
71 else if (UIsSuspended(vrup)) {
72 strcpy(action, "unsuspended");
73 }
74 else {
75 chanservsendmessage(sender, "Unknown suspend type encountered.");
76 return CMD_ERROR;
77 }
78
79 vrup->flags&=(~(QUFLAG_GLINE|QUFLAG_DELAYEDGLINE|QUFLAG_SUSPENDED));
80 vrup->suspendby=0;
81 vrup->suspendexp=0;
82 freesstring(vrup->suspendreason);
83 vrup->suspendreason=0;
84 csdb_updateuser(vrup);
85
86 chanservwallmessage("%s (%s) %s %s", sender->nick, rup->username, action, vrup->username);
87 chanservstdmessage(sender, QM_DONE);
88 return CMD_OK;
89 }