]> jfr.im git - irc/quakenet/newserv.git/blob - splitlist/splitlist_commands.c
TRUSTS: require sqlite
[irc/quakenet/newserv.git] / splitlist / splitlist_commands.c
1 /* oper commands for the splitlist */
2
3 #include "../lib/irc_string.h"
4 #include "../irc/irc.h"
5 #include "../splitlist/splitlist.h"
6 #include "../serverlist/serverlist.h"
7 #include "../control/control.h"
8 #include "../lib/version.h"
9
10 MODULE_VERSION("");
11
12 int spcmd_splitlist(void *source, int cargc, char **cargv);
13 int spcmd_splitdel(void *source, int cargc, char **cargv);
14
15 void _init(void) {
16 registercontrolhelpcmd("splitlist", NO_STAFF, 0, &spcmd_splitlist, "Usage: splitlist\nLists servers currently split from the network.");
17 registercontrolcmd("splitdel", 10, 1, &spcmd_splitdel);
18 }
19
20 void _fini(void) {
21 deregistercontrolcmd("splitlist", &spcmd_splitlist);
22 deregistercontrolcmd("splitdel", &spcmd_splitdel);
23 }
24
25 /* todo: add RELINK status */
26 int spcmd_splitlist(void *source, int cargc, char **cargv) {
27 nick *np = (nick*)source;
28 int i;
29 splitserver srv;
30
31 if (splitlist.cursi == 0) {
32 controlreply(np, "There currently aren't any registered splits.");
33
34 return CMD_OK;
35 }
36
37 controlreply(np, "Server Status Split for");
38
39 for (i = 0; i < splitlist.cursi; i++) {
40 srv = ((splitserver*)splitlist.content)[i];
41
42 controlreply(np, "%s M.I.A. %s (%s)", srv.name->content, longtoduration(getnettime() - srv.ts, 1), printflags(srv.type, servertypeflags));
43 }
44
45 controlreply(np, "--- End of splitlist");
46
47 return CMD_OK;
48 }
49
50 int spcmd_splitdel(void *source, int cargc, char **cargv) {
51 nick *np = (nick*)source;
52 int i, count;
53 splitserver srv;
54
55 if (cargc < 1) {
56 controlreply(np, "Syntax: splitdel <pattern>");
57
58 return CMD_ERROR;
59 }
60
61 count = 0;
62
63 for (i = splitlist.cursi - 1; i >= 0; i--) {
64 srv = ((splitserver*)splitlist.content)[i];
65
66 if (match2strings(cargv[0], srv.name->content)) {
67 sp_deletesplit(srv.name->content); /* inefficient .. but it doesn't matter */
68 count++;
69 }
70 }
71
72 controlreply(np, "%d %s deleted.", count, count != 1 ? "splits" : "split");
73
74 return CMD_OK;
75 }