]> jfr.im git - irc/quakenet/newserv.git/blob - chanserv/usercmds/unsuspenduser.c
Merge pull request #1 from meeb/meeb
[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: 2
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> <reason>
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, *suspendedby;
23 char action[100];
24 char *csuspendedby, *csuspendreason;
25 char *unsuspendreason;
26
27 if (!rup)
28 return CMD_ERROR;
29
30 if (cargc < 2) {
31 chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "unsuspenduser");
32 return CMD_ERROR;
33 }
34
35 unsuspendreason = cargv[1];
36 if(!checkreason(sender, unsuspendreason))
37 return CMD_ERROR;
38
39 if (cargv[0][0] == '#') {
40 if (!(vrup=findreguserbynick(&cargv[0][1]))) {
41 chanservstdmessage(sender, QM_UNKNOWNUSER, &cargv[0][1]);
42 return CMD_ERROR;
43 }
44 }
45 else {
46 nick *np;
47
48 if (!(np=getnickbynick(cargv[0]))) {
49 chanservstdmessage(sender, QM_UNKNOWNUSER, cargv[0]);
50 return CMD_ERROR;
51 }
52
53 if (!(vrup=getreguserfromnick(np)) && sender) {
54 chanservstdmessage(sender, QM_USERNOTAUTHED, cargv[0]);
55 return CMD_ERROR;
56 }
57 }
58
59 if (!UHasSuspension(vrup)) {
60 chanservstdmessage(sender, QM_USERNOTSUSPENDED, cargv[0]);
61 return CMD_ERROR;
62 }
63
64 if (UHasOperPriv(vrup) && !UHasAdminPriv(rup)) {
65 snprintf(action, 99, "unsuspenduser on %s", vrup->username);
66 chanservstdmessage(sender, QM_NOACCESS, action);
67 chanservwallmessage("%s (%s) FAILED to UNSUSPENDUSER %s", sender->nick, rup->username, vrup->username);
68 cs_log(sender, "UNSUSPENDUSER FAILED (not admin) %s", vrup->username);
69 return CMD_ERROR;
70 }
71
72 if (UIsDelayedGline(vrup)) {
73 strcpy(action, "delayed gline");
74 }
75 else if (UIsGline(vrup)) {
76 strcpy(action, "instant gline");
77 }
78 else if (UIsSuspended(vrup)) {
79 strcpy(action, "normal");
80 }
81 else {
82 chanservsendmessage(sender, "Unknown suspension type encountered.");
83 return CMD_ERROR;
84 }
85
86 suspendedby = findreguserbyID(vrup->suspendby);
87 csuspendedby = suspendedby?suspendedby->username:"(unknown)";
88 csuspendreason = vrup->suspendreason?vrup->suspendreason->content:"(no reason)";
89
90 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);
91 cs_log(sender,"UNSUSPENDUSER %s (%s, by: %s reason: %s), reason: %s", vrup->username, action, csuspendedby, csuspendreason, unsuspendreason);
92
93 vrup->flags&=(~(QUFLAG_GLINE|QUFLAG_DELAYEDGLINE|QUFLAG_SUSPENDED));
94 vrup->suspendby=0;
95 vrup->suspendexp=0;
96 freesstring(vrup->suspendreason);
97 vrup->suspendreason=0;
98 csdb_updateuser(vrup);
99
100 chanservstdmessage(sender, QM_DONE);
101 return CMD_OK;
102 }