Libraryless. Click here for Pure Java version (2269L/15K/50K).
1 | !752 |
2 | |
3 | static O mainBot; |
4 | |
5 | // TODO: make a PersistentMultiMap? |
6 | |
7 | static new MultiMap<S, S> lists; |
8 | |
9 | p { |
10 | load("lists"); |
11 | makeBot("These Are Bot."); |
12 | } |
13 | |
14 | synchronized answer { |
15 | L<S> tok = javaTok(s); |
16 | if (eq(get(tok, 1), "these") && eqic(get(tok, 3), "are") && eqic(get(tok, 7), ":")) { |
17 | S kind = unq(get(tok, 5)); |
18 | kind = singular(simplify(kind)); |
19 | L<S> rest = subList(tok, 8); |
20 | boolean comma = rest.contains(","); |
21 | new L<S> items; |
22 | if (comma) |
23 | for (L<S> item : splitListBy(rest, ",")) |
24 | items.add(trim(join(simpleSpaces(item)))); |
25 | else |
26 | items.addAll(codeTokensOnly(rest)); |
27 | printFormat("Adding items * to kind *", items, kind); |
28 | lists.addAll(kind, items); |
29 | save("lists"); |
30 | ret format("OK, now " + l(lists.get(kind)) + " items in kind *", kind); |
31 | } |
32 | |
33 | if (match("name a *", s, m)) { |
34 | S kind = singular(simplify(m.unq(0))); |
35 | L<S> items = lists.get(kind); |
36 | if (empty(items)) |
37 | ret "I don't know any " + m.unq(0); |
38 | ret randomOne(items); |
39 | } |
40 | |
41 | if (match("name * *", s, m)) { |
42 | S n = m.get(0); |
43 | if (isInteger(n)) { |
44 | int _n = min(100, parseInt(n)); |
45 | S kind = singular(simplify(m.unq(1))); |
46 | L<S> items = cloneList(lists.get(kind)); |
47 | if (l(items) < _n) |
48 | ret "I don't know that many " + m.unq(1); |
49 | new L<S> l; |
50 | for (int i = 0; i < _n; i++) { |
51 | S x = randomOne(items); |
52 | l.add(x); |
53 | items.remove(x); |
54 | } |
55 | ret join(", ", l); |
56 | } |
57 | } |
58 | |
59 | S userName = cast callOpt(mainBot, "getUserName"); |
60 | |
61 | if (match("am i a *", s, m)) { |
62 | if (empty(userName)) |
63 | ret "Well I don't know who you are! Please join slack.com"; |
64 | S kind = m.unq(0); |
65 | boolean result = containsIgnoreCase(lists.get(kind), userName) |
66 | || containsIgnoreCase(lists.get(kind), dropPrefix("@", userName)); |
67 | if (result) |
68 | ret format("Yes, you are a *!", kind); |
69 | else |
70 | ret format("As far as I know, you are not a *.", kind); |
71 | } |
72 | |
73 | if (match("is * a *", s, m)) { |
74 | S instance = m.unq(0); |
75 | S kind = singular(simplify(m.unq(1))); |
76 | boolean result = containsIgnoreCase(lists.get(kind), instance); |
77 | if (result) |
78 | ret format("Yes, * is a *", instance, kind); |
79 | else |
80 | ret format("I don't know that * is a *", instance, kind); |
81 | } |
82 | |
83 | if (match("Are there any * other than *?", s, m)) { |
84 | S kind = singular(simplify(m.unq(0))); |
85 | S instance = m.unq(1); |
86 | L<S> items = cloneList(lists.get(kind)); |
87 | removeIgnoreCase(items, instance); |
88 | if (empty(items)) |
89 | ret format("No, * is the only *.", instance, kind); |
90 | else |
91 | ret format("Yes, for example *", randomOne(items)); |
92 | } |
93 | |
94 | if (match("list all *", s, m)) { |
95 | S kind = singular(simplify(m.unq(0))); |
96 | L<S> items = lists.get(kind); |
97 | if (empty(items)) |
98 | ret format("I don't know any *", kind); |
99 | else |
100 | ret join(", ", items); |
101 | } |
102 | } |
103 | |
104 | static S simplify(S s) { |
105 | ret toLower(s); |
106 | } |
107 | |
108 | static S singular(S s) { |
109 | if (s.endsWith("ies")) |
110 | ret dropSuffix("ies", s) + "y"; |
111 | ret dropSuffix("s", s); |
112 | } |
download show line numbers debug dex old transpilations
Travelled to 16 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, jtubtzbbkimh, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, teubizvjbppd, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
Snippet ID: | #1002143 |
Snippet name: | These Are Bot |
Eternal ID of this version: | #1002143/1 |
Text MD5: | d23ea2215f9432013cce20eaec9c8fd5 |
Transpilation MD5: | 8f3b081b80f295119e25457edfd2ec3f |
Author: | stefan |
Category: | |
Type: | JavaX source code |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2015-12-22 01:10:24 |
Source code size: | 3122 bytes / 112 lines |
Pitched / IR pitched: | No / Yes |
Views / Downloads: | 819 / 1313 |
Referenced in: | [show references] |