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: | 500 / 5641 | 
| Version history: | 17 change(s) | 
| Referenced in: | [show references] |