Uses 5909K of libraries. Click here for Pure Java version (19876L/107K).
1 | !7 |
2 | |
3 | concept Msg {
|
4 | long msgID, channelID, userID; |
5 | long date, edited; // epochSeconds |
6 | S text; |
7 | |
8 | S text() { ret text; }
|
9 | } |
10 | |
11 | concept HasMsg {
|
12 | new Ref<Msg> msg; |
13 | |
14 | S text() { ret msg->text; }
|
15 | } |
16 | |
17 | concept Question > HasMsg {
|
18 | Answer acceptedAnswer; |
19 | } |
20 | |
21 | concept Answer > HasMsg {
|
22 | Question question; |
23 | } |
24 | |
25 | standardBot1 Asker {
|
26 | init {
|
27 | dbIndexing(Msg, 'msgID, Msg, 'channelID); |
28 | thread {
|
29 | temp enter(); |
30 | for (Question q) |
31 | print(q.msg->text + " => " + mapMethod text(linesAfterQuestion(q))); |
32 | } |
33 | } |
34 | |
35 | allServers {
|
36 | !include #1025906 // DiscordScanner |
37 | |
38 | L<Msg> linesAfterQuestion(Question q) {
|
39 | long channelID = q.msg->channelID; |
40 | if (channelID == 0) null; |
41 | L<Msg> l = conceptsWhere(Msg, +channelID); |
42 | l = takeFirst(10, sortByField date(filter(l, m -> m.date > q.msg->date))); |
43 | ret l; |
44 | } |
45 | |
46 | L<Question> openQuestionsInChannel(long channelID) {
|
47 | ret sortedByField date(filter(conceptsWhere(Question, acceptedAnswer := null), |
48 | q -> q.msg->channelID == channelID)); |
49 | } |
50 | } |
51 | |
52 | processSimplified {
|
53 | optPar Message msg; |
54 | optPar long channelID; |
55 | optPar long userID; |
56 | Msg storedMsg = pairA(storeMsg(msg)); |
57 | |
58 | if null (s = dropMyPrefixOrNull(s)) null; |
59 | |
60 | if "ask me something" {
|
61 | S q = "Is " + random(100) + " bigger than " + random(100) + "?"; |
62 | postInChannel(channelID, discordAt(userID) + " " + q, mm -> {
|
63 | Msg stored = pairA(storeMsg(mm)); |
64 | printStruct("New question: " + cnew Question(msg := stored));
|
65 | }); |
66 | null; |
67 | } |
68 | |
69 | L<Question> qs = openQuestionsInChannel(channelID); |
70 | Question q = last(qs); |
71 | if (q != null) {
|
72 | Answer a = cnew Answer(msg := storedMsg); |
73 | cset(q, acceptedAnswer := a); |
74 | ret "Assuming " + quote(s) + " is the answer to " + quote(q.text()); |
75 | } |
76 | } |
77 | } |
download show line numbers debug dex old transpilations
Travelled to 6 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tvejysmllsmz, vouqrxazstgt
No comments. add comment
| Snippet ID: | #1025905 |
| Snippet name: | Asker Bot [dev.] |
| Eternal ID of this version: | #1025905/18 |
| Text MD5: | 32a95923943bb14760c2fcc4ef2adaf8 |
| Transpilation MD5: | 180277dda3fbc1f641fd5f43b83279fd |
| Author: | stefan |
| Category: | javax |
| Type: | JavaX source code (Dynamic Module) |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2019-10-29 13:36:43 |
| Source code size: | 1921 bytes / 77 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 499 / 5640 |
| Version history: | 17 change(s) |
| Referenced in: | [show references] |