]>
jfr.im git - irc/quakenet/newserv.git/blob - chanserv/usercmds/userflags.c
1 /* Automatically generated by refactor.pl.
5 * CMDLEVEL: QCMD_AUTHED
7 * CMDDESC: Shows or changes user flags.
8 * CMDFUNC: csu_douserflags
9 * CMDPROTO: int csu_douserflags(void *source, int cargc, char **cargv);
10 * CMDHELP: Usage: USERFLAGS <flags>
11 * CMDHELP: Changes your current user flags, where:
12 * CMDHELP: flags - changes to apply, in the usual flag letters preceded by +/- format.
13 * CMDHELP: Valid user flags are:
14 * CMDHELP: +c ACH'MENTS - enables achievements system - allows use of achievement commands
15 * CMDHELP: and sends achievement messages.
16 * CMDHELP: +n NOTICE - causes the bot to sent you NOTICEs. If this flag is not set the
17 * CMDHELP: bot will communicate using PRIVMSG.
20 #include "../chanserv.h"
21 #include "../../lib/irc_string.h"
25 int csu_douserflags ( void * source
, int cargc
, char ** cargv
) {
27 reguser
* rup
= getreguserfromnick ( sender
), * target
;
28 int arg
= 0 , wasorisoper
;
29 flag_t flagmask
, changemask
, oldflags
;
35 if ( cargc
> 0 && (* cargv
[ 0 ]!= '+' && * cargv
[ 0 ]!= '-' )) {
37 /* If the first char isn't a "change" character, it must specify a target */
39 if (!( target
= findreguser ( sender
, cargv
[ 0 ])))
42 if ( target
!= rup
&& ! cs_privcheck ( QPRIV_VIEWUSERFLAGS
, sender
)) {
43 chanservstdmessage ( sender
, QM_NOACCESSONUSER
, "userflags" , cargv
[ 0 ]);
51 /* OK, now we have a changestring.. */
52 if ( target
!= rup
&& ! cs_privcheck ( QPRIV_CHANGEUSERFLAGS
, sender
)) {
53 /* Safe to use cargv[0] because if target != rup then first arg must have been the target name */
54 chanservstdmessage ( sender
, QM_NOACCESSONUSER
, "userflags" , cargv
[ 0 ]);
58 strcpy ( flagbuf
, printflags ( target
-> flags
, ruflags
));
59 oldflags
= target
-> flags
;
61 changemask
= QUFLAG_NOTICE
;
64 /* If you're changing yourself, you can give up the "status" flags and add/remove notice */
65 changemask
|=( target
-> flags
& ( QUFLAG_OPER
| QUFLAG_DEV
| QUFLAG_PROTECT
| QUFLAG_HELPER
| QUFLAG_ADMIN
| QUFLAG_STAFF
));
68 /* Warning, policy ahead */
70 if ( UHasStaffPriv ( rup
))
71 changemask
|= QUFLAG_PROTECT
;
73 if ( UHasOperPriv ( rup
))
74 changemask
|= QUFLAG_PROTECT
| QUFLAG_TRUST
; /* QUFLAG_NOINFO; */
76 if ( UHasAdminPriv ( rup
))
77 changemask
|= ( QUFLAG_OPER
| QUFLAG_HELPER
| QUFLAG_CLEANUPEXEMPT
| QUFLAG_STAFF
);
80 changemask
= QUFLAG_ALL
;
82 if ( time ( NULL
) > ACHIEVEMENTS_START
) {
83 changemask
|= QUFLAG_ACHIEVEMENTS
;
86 wasorisoper
= UHasOperPriv ( target
);
87 setflags (& target
-> flags
, changemask
, cargv
[ arg
], ruflags
, REJECT_NONE
);
88 wasorisoper
|= UHasOperPriv ( target
);
91 if (! UHasStaffPriv ( target
)) {
92 target
-> flags
&= ~ QUFLAG_PROTECT
;
95 cs_log ( sender
, "USERFLAGS # %s %s ( %s -> %s )" , target
-> username
, cargv
[ arg
], flagbuf
, printflags ( target
-> flags
, ruflags
));
97 /* only warn about interesting changes */
98 if (( target
-> flags
^ oldflags
) & ~( QUFLAG_NOTICE
| QUFLAG_INFO
| QUFLAG_TRUST
| QUFLAG_ACHIEVEMENTS
)) {
99 chanservwallmessage ( " %s ( %s ) just used USERFLAGS on %s %s ( %s -> %s )" , sender
-> nick
, rup
-> username
, target
-> username
, cargv
[ arg
], flagbuf
, printflags ( target
-> flags
, ruflags
));
101 #ifdef AUTHGATE_WARNINGS
103 chanservsendmessage ( sender
, "WARNING FOR PRIVILEGED USERS: you MUST go to https://auth.quakenet.org and attempt to login as %s (with any password) to update the cache, otherwise their old credentials will be preserved in certain circumstances." , target
-> username
);
106 csdb_updateuser ( target
);
108 /* Disabled this for now as live ircu doesn't support it - splidge
109 if ((anp=findauthname(rup->ID)))
110 localusersetaccountflags(anp, cs_accountflagmap(target));
113 chanservstdmessage ( sender
, QM_DONE
);
116 if ( cs_privcheck ( QPRIV_VIEWUSERFLAGS
, sender
))
119 flagmask
= QUFLAG_INFO
| QUFLAG_NOTICE
| QUFLAG_OPER
| QUFLAG_HELPER
| QUFLAG_DEV
| QUFLAG_ADMIN
| QUFLAG_STAFF
| QUFLAG_ACHIEVEMENTS
;
121 chanservstdmessage ( sender
, QM_CURUSERFLAGS
, target
-> username
, printflagsornone ( target
-> flags
& flagmask
, ruflags
));