]>
jfr.im git - irc/quakenet/newserv.git/blob - control/control-lite.c
4 * This is the first client module for newserv :)
6 * A very simple bot which should give people some ideas for how to
7 * implement stuff on this thing
10 #include "../irc/irc_config.h"
11 #include "../parser/parser.h"
12 #include "../localuser/localuser.h"
13 #include "../localuser/localuserchannel.h"
14 #include "../nick/nick.h"
15 #include "../lib/sstring.h"
16 #include "../core/config.h"
17 #include "../irc/irc.h"
18 #include "../lib/splitline.h"
19 #include "../lib/flags.h"
20 #include "../core/schedule.h"
21 #include "../lib/base64.h"
22 #include "../core/modules.h"
31 CommandTree
* controlcmds
;
33 void handlemessages ( nick
* target
, int messagetype
, void ** args
);
34 int controlstatus ( void * sender
, int cargc
, char ** cargv
);
35 void controlconnect ( void * arg
);
36 int controlwhois ( void * sender
, int cargc
, char ** cargv
);
37 int relink ( void * sender
, int cargc
, char ** cargv
);
38 int controlinsmod ( void * sender
, int cargc
, char ** cargv
);
39 int controlrmmod ( void * sender
, int cargc
, char ** cargv
);
42 controlcmds
= newcommandtree ();
44 addcommandtotree ( controlcmds
, "status" , 10 , 0 ,& controlstatus
);
45 addcommandtotree ( controlcmds
, "whois" , 10 , 1 ,& controlwhois
);
46 addcommandtotree ( controlcmds
, "relink" , 10 , 1 ,& relink
);
47 addcommandtotree ( controlcmds
, "insmod" , 10 , 1 ,& controlinsmod
);
48 addcommandtotree ( controlcmds
, "rmmod" , 10 , 1 ,& controlrmmod
);
49 scheduleoneshot ( time ( NULL
)+ 1 ,& controlconnect
, NULL
);
52 void controlconnect ( void * arg
) {
53 sstring
* cnick
, * myident
, * myhost
, * myrealname
;
55 cnick
= getcopyconfigitem ( "control" , "nick" , "C" , NICKLEN
);
56 myident
= getcopyconfigitem ( "control" , "ident" , "control" , NICKLEN
);
57 myhost
= getcopyconfigitem ( "control" , "hostname" , myserver
-> content
, HOSTLEN
);
58 myrealname
= getcopyconfigitem ( "control" , "realname" , "NewServ Control Service" , REALLEN
);
60 mynick
= registerlocaluser ( cnick
-> content
, myident
-> content
, myhost
-> content
, myrealname
-> content
, NULL
, UMODE_SERVICE
| UMODE_DEAF
| UMODE_OPER
,& handlemessages
);
65 freesstring ( myrealname
);
68 void handlestats ( int hooknum
, void * arg
) {
69 sendmessagetouser ( mynick
, statsnick
,( char *) arg
);
72 int controlstatus ( void * sender
, int cargc
, char ** cargv
) {
73 statsnick
=( nick
*) sender
;
74 registerhook ( HOOK_CORE_STATSREPLY
,& handlestats
);
75 triggerhook ( HOOK_CORE_STATSREQUEST
,( void *) 6 );
76 deregisterhook ( HOOK_CORE_STATSREPLY
,& handlestats
);
80 int controlwhois ( void * sender
, int cargc
, char ** cargv
) {
84 sendmessagetouser ( mynick
,( nick
*) sender
, "Usage: whois <user>" );
88 if (( target
= getnickbynick ( cargv
[ 0 ]))== NULL
) {
89 sendmessagetouser ( mynick
,( nick
*) sender
, "Sorry, couldn't find that user" );
93 sendmessagetouser ( mynick
,( nick
*) sender
, "Nick : %s " , target
-> nick
);
94 sendmessagetouser ( mynick
,( nick
*) sender
, "Numeric : %s " , longtonumeric ( target
-> numeric
, 5 ));
95 sendmessagetouser ( mynick
,( nick
*) sender
, "User@Host : %s @ %s ( %d user(s) on this host)" , target
-> ident
, target
-> host
-> name
-> content
, target
-> host
-> clonecount
);
96 sendmessagetouser ( mynick
,( nick
*) sender
, "IP address: %s " , IPtostr ( target
-> p_ipaddr
));
97 sendmessagetouser ( mynick
,( nick
*) sender
, "Realname : %s ( %d user(s) have this realname)" , target
-> realname
-> name
-> content
, target
-> realname
-> usercount
);
99 sendmessagetouser ( mynick
,( nick
*) sender
, "Umode(s) : %s " , printflags ( target
-> umodes
, umodeflags
));
101 if ( IsAccount ( target
)) {
102 sendmessagetouser ( mynick
,( nick
*) sender
, "Account : %s " , target
-> authname
);
108 int controlinsmod ( void * sender
, int cargc
, char ** cargv
) {
110 sendmessagetouser ( mynick
,( nick
*) sender
, "Usage: insmod <modulename>" );
114 switch ( insmod ( cargv
[ 0 ])) {
116 sendmessagetouser ( mynick
,( nick
*) sender
, "Unable to load module %s " , cargv
[ 0 ]);
120 sendmessagetouser ( mynick
,( nick
*) sender
, "Module %s already loaded, or name not valid" , cargv
[ 0 ]);
124 sendmessagetouser ( mynick
,( nick
*) sender
, "Module %s loaded." , cargv
[ 0 ]);
128 sendmessagetouser ( mynick
,( nick
*) sender
, "An unknown error occured." );
133 int controlrmmod ( void * sender
, int cargc
, char ** cargv
) {
135 sendmessagetouser ( mynick
,( nick
*) sender
, "Usage: insmod <modulename>" );
139 switch ( rmmod ( cargv
[ 0 ])) {
141 sendmessagetouser ( mynick
,( nick
*) sender
, "Module %s is not loaded." , cargv
[ 0 ]);
145 sendmessagetouser ( mynick
,( nick
*) sender
, "Module %s unloaded." , cargv
[ 0 ]);
149 sendmessagetouser ( mynick
,( nick
*) sender
, "An unknown error occured." );
154 int relink ( void * sender
, int cargc
, char ** cargv
) {
156 sendmessagetouser ( mynick
,( nick
*) sender
, "You must give a reason." );
160 irc_send ( " %s SQ %s 0 : %s " , mynumeric
-> content
, myserver
-> content
, cargv
[ 0 ]);
166 void handlemessages ( nick
* target
, int messagetype
, void ** args
) {
172 switch ( messagetype
) {
175 /* If it's a message, first arg is nick and second is message */
176 sender
=( nick
*) args
[ 0 ];
178 /* Split the line into params */
179 cargc
= splitline (( char *) args
[ 1 ], cargv
, 20 , 0 );
181 cmd
= findcommandintree ( controlcmds
, cargv
[ 0 ], 1 );
183 sendmessagetouser ( mynick
, sender
, "Unknown command." );
187 if ( cmd
-> level
>= 10 && ! IsOper ( sender
)) {
188 sendmessagetouser ( mynick
, sender
, "You need to be opered to use this command." );
192 /* If we were doing "authed user tracking" here we'd put a check in for authlevel */
194 /* Check the maxargs */
195 if ( cmd
-> maxparams
<( cargc
- 1 )) {
196 /* We need to do some rejoining */
197 rejoinline ( cargv
[ cmd
-> maxparams
], cargc
-( cmd
-> maxparams
));
198 cargc
=( cmd
-> maxparams
)+ 1 ;
201 ( cmd
-> handler
)(( void *) sender
, cargc
- 1 ,&( cargv
[ 1 ]));
205 /* someone killed me? Bastards */
206 scheduleoneshot ( time ( NULL
)+ 1 ,& controlconnect
, NULL
);