]>
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: +n NOTICE - causes the bot to sent you NOTICEs. If this flag is not set the
15 * CMDHELP: bot will communicate using PRIVMSG.
18 #include "../chanserv.h"
19 #include "../../lib/irc_string.h"
23 int csu_douserflags ( void * source
, int cargc
, char ** cargv
) {
25 reguser
* rup
= getreguserfromnick ( sender
), * target
;
27 flag_t flagmask
, changemask
, oldflags
;
34 chanservstdmessage ( sender
, QM_NOTENOUGHPARAMS
, "userflags" );
38 if (* cargv
[ 0 ]!= '+' && * cargv
[ 0 ]!= '-' ) {
40 /* If the first char isn't a "change" character, it must specify a target */
42 if (!( target
= findreguser ( sender
, cargv
[ 0 ])))
45 if ( target
!= rup
&& ! cs_privcheck ( QPRIV_VIEWUSERFLAGS
, sender
)) {
46 chanservstdmessage ( sender
, QM_NOACCESS
, "userflags" );
54 /* OK, now we have a changestring.. */
55 if ( target
!= rup
&& ! cs_privcheck ( QPRIV_CHANGEUSERFLAGS
, sender
)) {
56 chanservstdmessage ( sender
, QM_NOACCESS
, "userflags" );
60 strcpy ( flagbuf
, printflags ( target
-> flags
, ruflags
));
61 oldflags
= target
-> flags
;
63 changemask
= QUFLAG_NOTICE
| QUFLAG_INFO
;
66 /* If you're changing yourself, you can give up the "status" flags and add/remove notice */
67 changemask
|=( target
-> flags
& ( QUFLAG_OPER
| QUFLAG_DEV
| QUFLAG_PROTECT
| QUFLAG_HELPER
| QUFLAG_ADMIN
));
70 /* Warning, policy ahead */
72 if ( UHasOperPriv ( rup
))
73 changemask
|= QUFLAG_GLINE
| QUFLAG_DELAYEDGLINE
| QUFLAG_RESTRICTED
| QUFLAG_PROTECT
;
75 if ( UHasAdminPriv ( rup
))
76 changemask
|= ( QUFLAG_OPER
| QUFLAG_HELPER
);
79 changemask
= QUFLAG_ALL
;
81 setflags (& target
-> flags
, changemask
, cargv
[ arg
], ruflags
, REJECT_NONE
);
84 if (! UHasHelperPriv ( target
)) {
85 target
-> flags
&= ~ QUFLAG_PROTECT
;
88 cs_log ( sender
, "USERFLAGS # %s %s ( %s -> %s )" , target
-> username
, cargv
[ arg
], flagbuf
, printflags ( target
-> flags
, ruflags
));
90 /* only warn about interesting changes */
91 if (( target
-> flags
^ oldflags
) & ~( QUFLAG_NOTICE
| QUFLAG_INFO
))
92 chanservwallmessage ( " %s ( %s ) just used USERFLAGS on %s %s ( %s -> %s )" , sender
-> nick
, rup
-> username
, target
-> username
, cargv
[ arg
], flagbuf
, printflags ( target
-> flags
, ruflags
));
94 csdb_updateuser ( target
);
95 chanservstdmessage ( sender
, QM_DONE
);
98 if ( cs_privcheck ( QPRIV_VIEWUSERFLAGS
, sender
))
101 flagmask
= QUFLAG_INFO
| QUFLAG_NOTICE
| QUFLAG_OPER
| QUFLAG_HELPER
| QUFLAG_DEV
| QUFLAG_ADMIN
;
103 chanservstdmessage ( sender
, QM_CURUSERFLAGS
, target
-> username
, printflags ( target
-> flags
& flagmask
, ruflags
));