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