]>
Commit | Line | Data |
---|---|---|
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 | controlreply(sender, "%s", whowas_formatchannels(ww)); | |
44 | } else if (matches == limit + 1) | |
45 | controlreply(sender, "--- More than %d matches, skipping the rest", limit); | |
46 | } | |
47 | } | |
48 | ||
49 | controlreply(sender, "--- Found %d entries.", matches); | |
50 | ||
51 | return CMD_OK; | |
52 | } | |
53 | ||
54 | static int whowas_cmdwhowaschase(void *source, int cargc, char **cargv) { | |
55 | nick *sender = source; | |
56 | whowas *ww; | |
57 | ||
58 | if (cargc < 1) | |
59 | return CMD_USAGE; | |
60 | ||
61 | ww = whowas_chase(cargv[0], 900); | |
62 | ||
63 | if (!ww) { | |
64 | controlreply(sender, "No whowas record found."); | |
65 | return CMD_OK; | |
66 | } | |
67 | ||
68 | controlreply(sender, "%s", whowas_format(ww)); | |
69 | controlreply(sender, "%s", whowas_formatchannels(ww)); | |
70 | controlreply(sender, "Done."); | |
71 | ||
72 | return CMD_OK; | |
73 | } | |
74 | ||
75 | void _init(void) { | |
76 | registercontrolhelpcmd("whowas", NO_OPER, 2, &whowas_cmdwhowas, "Usage: whowas <mask> ?limit?\nLooks up information about recently disconnected users."); | |
77 | registercontrolhelpcmd("whowaschase", NO_OPER, 2, &whowas_cmdwhowaschase, "Usage: whowaschase <nick>\nFinds most-recent whowas record for a nick."); | |
78 | } | |
79 | ||
80 | void _fini(void) { | |
81 | deregistercontrolcmd("whowas", &whowas_cmdwhowas); | |
82 | deregistercontrolcmd("whowaschase", &whowas_cmdwhowaschase); | |
83 | } |