]>
jfr.im git - irc/quakenet/newserv.git/blob - noperserv/noperserv_commands.c
b3bba801fdb781ef1a168068e562dd72f8c5bb7b
7 #include "../control/control.h"
8 #include "../nick/nick.h"
9 #include "../lib/irc_string.h"
10 #include "../lib/strlfunc.h"
11 #include "../localuser/localuserchannel.h"
13 int controlkill ( void * sender
, int cargc
, char ** cargv
);
14 int controlopchan ( void * sender
, int cargc
, char ** cargv
);
15 int controlkick ( void * sender
, int cargc
, char ** cargv
);
16 int controlspewchan ( void * sender
, int cargc
, char ** cargv
);
17 int controlspew ( void * sender
, int cargc
, char ** cargv
);
18 int controlresync ( void * sender
, int cargc
, char ** cargv
);
19 int controlbroadcast ( void * sender
, int cargc
, char ** cargv
);
20 int controlobroadcast ( void * sender
, int cargc
, char ** cargv
);
21 int controlmbroadcast ( void * sender
, int cargc
, char ** cargv
);
22 int controlsbroadcast ( void * sender
, int cargc
, char ** cargv
);
25 registercontrolhelpcmd ( "kill" , NO_OPER
, 2 , & controlkill
, "Usage: kill <nick> ?reason? \n Kill specified user with given reason (or 'Killed')." );
26 registercontrolhelpcmd ( "kick" , NO_OPER
, 3 , & controlkick
, "Usage: kick <channel> <user> ?reason? \n Kick a user from the given channel, with given reason (or 'Kicked')." );
28 registercontrolhelpcmd ( "spewchan" , NO_OPER
, 1 , & controlspewchan
, "Usage: spewchan <pattern> \n Shows all channels which are matched by the given pattern" );
30 /* registercontrolhelpcmd("spew", NO_OPER, 1, &controlspew, "Usage: spewchan <pattern>\nShows all userss which are matched by the given pattern"); */
32 registercontrolhelpcmd ( "resync" , NO_OPER
, 1 , & controlresync
, "Usage: resync <channel> \n Resyncs a desynched channel" );
34 registercontrolhelpcmd ( "broadcast" , NO_OPER
, 1 , & controlbroadcast
, "Usage: broadcast <text> \n Sends a message to all users." );
35 registercontrolhelpcmd ( "obroadcast" , NO_OPER
, 1 , & controlobroadcast
, "Usage: obroadcast <text> \n Sends a message to all IRC operators." );
36 registercontrolhelpcmd ( "mbroadcast" , NO_OPER
, 2 , & controlmbroadcast
, "Usage: mbroadcast <mask> <text> \n Sends a message to all users matching the mask." );
37 registercontrolhelpcmd ( "sbroadcast" , NO_OPER
, 2 , & controlsbroadcast
, "Usage: sbroadcast <mask> <text> \n Sends a message to all users on specific server(s)." );
41 deregistercontrolcmd ( "obroadcast" , controlobroadcast
);
42 deregistercontrolcmd ( "sbroadcast" , controlsbroadcast
);
43 deregistercontrolcmd ( "mbroadcast" , controlmbroadcast
);
44 deregistercontrolcmd ( "broadcast" , controlbroadcast
);
46 deregistercontrolcmd ( "resync" , controlresync
);
47 /* deregistercontrolcmd("spew", controlspew); */
48 deregistercontrolcmd ( "spewchan" , controlspewchan
);
50 deregistercontrolcmd ( "kill" , controlkill
);
51 deregistercontrolcmd ( "kick" , controlkick
);
54 int controlkick ( void * sender
, int cargc
, char ** cargv
) {
55 nick
* np
=( nick
*) sender
;
62 if (( cp
= findchannel ( cargv
[ 0 ]))== NULL
) {
63 controlreply ( np
, "Couldn't find that channel." );
67 if (( target
= getnickbynick ( cargv
[ 1 ]))== NULL
) {
68 controlreply ( np
, "Sorry, couldn't find that user" );
72 controlwall ( NO_OPER
, NL_KICKS
, " %s / %s sent KICK for %s ! %s @ %s on %s ( %s )" , np
-> nick
, np
-> authname
, target
-> nick
, target
-> ident
, target
-> host
-> name
-> content
, cp
-> index
-> name
-> content
, ( cargc
> 2 )? cargv
[ 2 ]: "Kicked" );
73 localkickuser ( NULL
, cp
, target
, ( cargc
> 2 )? cargv
[ 2 ]: "Kicked" );
74 controlreply ( sender
, "KICK sent." );
79 /* NO checking to see if it's us or anyone important */
80 int controlkill ( void * sender
, int cargc
, char ** cargv
) {
82 nick
* np
= ( nick
*) sender
;
87 if (( target
= getnickbynick ( cargv
[ 0 ]))== NULL
) {
88 controlreply ( np
, "Sorry, couldn't find that user." );
92 controlwall ( NO_OPER
, NL_KILLS
, " %s / %s sent KILL for %s ! %s @ %s ( %s )" , np
-> nick
, np
-> authname
, target
-> nick
, target
-> ident
, target
-> host
-> name
-> content
, ( cargc
> 1 )? cargv
[ 1 ]: "Killed" );
93 killuser ( NULL
, target
, ( cargc
> 1 )? cargv
[ 1 ]: "Killed" );
94 controlreply ( np
, "KILL sent." );
99 int controlresync ( void * sender
, int cargc
, char ** cargv
) {
100 nick
* np
= ( nick
*) sender
;
108 cp
= findchannel ( cargv
[ 0 ]);
111 controlreply ( np
, "No such channel." );
116 irc_send ( " %s CM %s o" , mynumeric
-> content
, cp
-> index
-> name
-> content
);
118 localsetmodeinit (& changes
, cp
, mynick
);
120 for ( a
= 0 ; a
< cp
-> users
-> hashsize
; a
++) {
121 if ( cp
-> users
-> content
[ a
] != nouser
) {
122 np
= getnickbynumeric ( cp
-> users
-> content
[ a
]);
124 /* make newserv believe that this user is not opped */
125 if ( cp
-> users
-> content
[ a
] & CUMODE_OP
)
126 cp
-> users
-> content
[ a
] &= ~ CUMODE_OP
;
127 else if (! IsService ( np
)) /* if the user wasn't opped before and is not a service we don't care about him */
131 localdosetmode_nick (& changes
, np
, MC_OP
);
135 localsetmodeflush (& changes
, 1 );
137 controlreply ( np
, "Done." );
142 int controlspew ( void * sender
, int cargc
, char ** cargv
) {
143 nick
* np
= ( nick
*) sender
;
148 int controlspewchan ( void * sender
, int cargc
, char ** cargv
) {
149 nick
* np
= ( nick
*) sender
;
151 int i
, a
, ccount
= 0 , morecservices
, ucount
, cscount
;
160 for ( i
= 0 ; i
< CHANNELHASHSIZE
; i
++) {
161 for ( cip
= chantable
[ i
]; cip
; cip
= cip
-> next
) {
162 if (( cp
= cip
-> channel
) != NULL
&& match2strings ( cargv
[ 0 ], cip
-> name
-> content
)) {
163 /* find channel services */
165 cscount
= ucount
= morecservices
= 0 ;
167 for ( a
= 0 ; a
< cp
-> users
-> hashsize
; a
++) {
168 if ( cp
-> users
-> content
[ a
] != nouser
) {
169 np2
= getnickbynumeric ( cp
-> users
-> content
[ a
]);
171 if ( IsService ( np2
)) {
174 if ( strlen ( cservices
) < 100 ) {
176 strlcat ( cservices
, ", " , sizeof ( cservices
));
178 strlcat ( cservices
, np2
-> nick
, sizeof ( cservices
));
189 snprintf ( cservices
+ strlen ( cservices
), sizeof ( cservices
), " and %d more" , morecservices
);
191 snprintf ( strcscount
, sizeof ( strcscount
), " %d " , cscount
);
193 /* TODO: print this channel ;; @slug -- WTF? */
194 controlreply ( np
, "%-30s %5 ld %-8s %s%s %-11s %s%s%s " ,
197 ucount
!= 1 ? "users" : "user" ,
198 * cservices
? "- found " : "" ,
199 * cservices
? strcscount
: "" ,
200 * cservices
? ( strchr ( cservices
, ',' ) ? " chanservs" : " chanserv" ) : "" ,
201 * cservices
? "(" : "" ,
202 * cservices
? cservices
: "" ,
203 * cservices
? ")" : "" );
208 break ; /* Don't ever list more than 1000 channels */
214 controlreply ( np
, "More than 1000 matching channels were found. Please use a more specific pattern." );
216 controlreply ( np
, "Found %d channels matching specified pattern." , ccount
);
221 int controlbroadcast ( void * sender
, int cargc
, char ** cargv
) {
222 nick
* np
= ( nick
*) sender
;
227 controlwall ( NO_OPER
, NL_BROADCASTS
, " %s / %s sent a broadcast: %s " , np
-> nick
, np
-> authname
, cargv
[ 0 ]);
229 irc_send ( " %s O $* :(Broadcast) %s " , longtonumeric ( mynick
-> numeric
, 5 ), cargv
[ 0 ]);
231 controlreply ( np
, "Message broadcasted." );
236 int controlmbroadcast ( void * sender
, int cargc
, char ** cargv
) {
237 nick
* np
= ( nick
*) sender
;
242 controlwall ( NO_OPER
, NL_BROADCASTS
, " %s / %s sent an mbroadcast to %s : %s " , np
-> nick
, np
-> authname
, cargv
[ 0 ], cargv
[ 1 ]);
244 irc_send ( " %s O $@ %s :(mBroadcast) %s " , longtonumeric ( mynick
-> numeric
, 5 ), cargv
[ 0 ], cargv
[ 1 ]);
246 controlreply ( np
, "Message mbroadcasted." );
251 int controlsbroadcast ( void * sender
, int cargc
, char ** cargv
) {
252 nick
* np
= ( nick
*) sender
;
257 controlwall ( NO_OPER
, NL_BROADCASTS
, " %s / %s sent a sbroadcast to %s : %s " , np
-> nick
, np
-> authname
, cargv
[ 0 ], cargv
[ 1 ]);
259 irc_send ( " %s O $ %s :(sBroadcast) %s " , longtonumeric ( mynick
-> numeric
, 5 ), cargv
[ 0 ], cargv
[ 1 ]);
261 controlreply ( np
, "Message sbroadcasted." );
266 int controlobroadcast ( void * sender
, int cargc
, char ** cargv
) {
267 nick
* np
= ( nick
*) sender
, * nip
;
273 controlwall ( NO_OPER
, NL_BROADCASTS
, " %s / %s sent an obroadcast: %s " , np
-> nick
, np
-> authname
, cargv
[ 0 ]);
275 for ( i
= 0 ; i
< NICKHASHSIZE
; i
++)
276 for ( nip
= nicktable
[ i
]; nip
; nip
= nip
-> next
)
277 if ( nip
&& IsOper ( nip
))
278 controlnotice ( nip
, "(oBroadcast) %s " , cargv
[ 0 ]);
280 controlreply ( np
, "Message obroadcasted." );