]>
Commit | Line | Data |
---|---|---|
1dd6d55d | 1 | /* Automatically generated by refactor.pl. |
2 | * | |
3 | * | |
4 | * CMDNAME: unsuspenduser | |
5 | * CMDLEVEL: QCMD_OPER | |
dae08100 | 6 | * CMDARGS: 2 |
1dd6d55d | 7 | * CMDDESC: Unsuspend a user. |
8 | * CMDFUNC: csu_dounsuspenduser | |
9 | * CMDPROTO: int csu_dounsuspenduser(void *source, int cargc, char **cargv); | |
dae08100 | 10 | * CMDHELP: Usage: unsuspenduser <username> <reason> |
94e4d2f4 | 11 | * CMDHELP: Unsuspends the specified user. |
1dd6d55d | 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); | |
dae08100 | 22 | reguser *vrup, *suspendedby; |
1dd6d55d | 23 | char action[100]; |
dae08100 CP |
24 | char *csuspendedby, *csuspendreason; |
25 | char *unsuspendreason; | |
1dd6d55d | 26 | |
27 | if (!rup) | |
28 | return CMD_ERROR; | |
29 | ||
dae08100 | 30 | if (cargc < 2) { |
1dd6d55d | 31 | chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "unsuspenduser"); |
32 | return CMD_ERROR; | |
33 | } | |
dae08100 CP |
34 | |
35 | unsuspendreason = cargv[1]; | |
36 | if(!checkreason(sender, unsuspendreason)) | |
37 | return CMD_ERROR; | |
38 | ||
1dd6d55d | 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); | |
ad23ee7a CP |
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); | |
1dd6d55d | 69 | return CMD_ERROR; |
70 | } | |
71 | ||
72 | if (UIsDelayedGline(vrup)) { | |
ad23ee7a | 73 | strcpy(action, "delayed gline"); |
1dd6d55d | 74 | } |
75 | else if (UIsGline(vrup)) { | |
ad23ee7a | 76 | strcpy(action, "instant gline"); |
1dd6d55d | 77 | } |
78 | else if (UIsSuspended(vrup)) { | |
ad23ee7a | 79 | strcpy(action, "normal"); |
1dd6d55d | 80 | } |
1dd6d55d | 81 | else { |
ad23ee7a | 82 | chanservsendmessage(sender, "Unknown suspension type encountered."); |
1dd6d55d | 83 | return CMD_ERROR; |
84 | } | |
dae08100 CP |
85 | |
86 | suspendedby = findreguserbyID(vrup->suspendby); | |
87 | csuspendedby = suspendedby?suspendedby->username:"(unknown)"; | |
88 | csuspendreason = vrup->suspendreason?vrup->suspendreason->content:"(no reason)"; | |
89 | ||
d16b254e CP |
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); | |
dae08100 | 92 | |
7d27d0cd | 93 | vrup->flags&=(~(QUFLAG_GLINE|QUFLAG_DELAYEDGLINE|QUFLAG_SUSPENDED)); |
1dd6d55d | 94 | vrup->suspendby=0; |
95 | vrup->suspendexp=0; | |
96 | freesstring(vrup->suspendreason); | |
97 | vrup->suspendreason=0; | |
98 | csdb_updateuser(vrup); | |
99 | ||
1dd6d55d | 100 | chanservstdmessage(sender, QM_DONE); |
101 | return CMD_OK; | |
102 | } |