]> jfr.im git - irc/quakenet/newserv.git/blob - whowas/whowas_commands.c
Merge default.
[irc/quakenet/newserv.git] / whowas / whowas_commands.c
1 #include <stdio.h>
2 #include <string.h>
3 #include "../core/hooks.h"
4 #include "../control/control.h"
5 #include "../irc/irc.h"
6 #include "../lib/irc_string.h"
7 #include "../lib/version.h"
8 #include "whowas.h"
9
10 MODULE_VERSION("");
11
12 static int whowas_cmdwhowas(void *source, int cargc, char **cargv) {
13 nick *sender = source;
14 char *pattern;
15 whowas *ww;
16 nick *np;
17 int i;
18 char hostmask[WW_MASKLEN + 1];
19 int matches = 0, limit = 500;
20
21 if (cargc < 1)
22 return CMD_USAGE;
23
24 pattern = cargv[0];
25
26 if (cargc > 1)
27 limit = strtol(cargv[1], NULL, 10);
28
29 for (i = whowasoffset; i < whowasoffset + WW_MAXENTRIES; i++) {
30 ww = &whowasrecs[i % WW_MAXENTRIES];
31
32 if (ww->type == WHOWAS_UNUSED)
33 continue;
34
35 np = &ww->nick;
36 snprintf(hostmask, sizeof(hostmask), "%s!%s@%s", np->nick, np->ident, np->host->name->content);
37
38 if (match2strings(pattern, hostmask)) {
39 matches++;
40
41 if (matches <= limit)
42 controlreply(sender, "%s", whowas_format(ww));
43 else if (matches == limit + 1)
44 controlreply(sender, "--- More than %d matches, skipping the rest", limit);
45 }
46 }
47
48 controlreply(sender, "--- Found %d entries.", matches);
49
50 return CMD_OK;
51 }
52
53 static int whowas_cmdwhowaschase(void *source, int cargc, char **cargv) {
54 nick *sender = source;
55 whowas *ww;
56
57 if (cargc < 1)
58 return CMD_USAGE;
59
60 ww = whowas_chase(cargv[0], 900);
61
62 if (!ww) {
63 controlreply(sender, "No whowas record found.");
64 return CMD_OK;
65 }
66
67 controlreply(sender, "%s", whowas_format(ww));
68 controlreply(sender, "Done.");
69
70 return CMD_OK;
71 }
72
73 void _init(void) {
74 registercontrolhelpcmd("whowas", NO_OPER, 2, &whowas_cmdwhowas, "Usage: whowas <mask> ?limit?\nLooks up information about recently disconnected users.");
75 registercontrolhelpcmd("whowaschase", NO_OPER, 2, &whowas_cmdwhowaschase, "Usage: whowaschase <nick>\nFinds most-recent whowas record for a nick.");
76 }
77
78 void _fini(void) {
79 deregistercontrolcmd("whowas", &whowas_cmdwhowas);
80 deregistercontrolcmd("whowaschase", &whowas_cmdwhowaschase);
81 }