Uses 4998K of libraries. Click here for Pure Java version (12711L/91K).
abstract sclass DynTalkBot > DynDiscordHopper { switchable S myName = "Anonymous bot"; transient bool useAGIBlueForDropPunctuation = true; transient bool preprocessAtSelfToMyName = true; transient bool dropPunctuation = true; L<Long> authorizedUsers = ll(547706854680297473); // stefan start { dm_vmBus_onMessage_q('discordGuildJoin, voidfunc(Map map) { ret unless map.get('module) == module(); print("Got join"); onUserJoin(getLong userID(map), map); }); } // overridable void onUserJoin(long userID, O... _) {} @Override S answer(S input, Map map) { try answer super.answer(input, map); // discord hopping ret mapEachLine_tlft_nempties(input, s -> { ret processLine(s, map); }); } S processLine(S s, O... _) { s = preprocess(s, _); ret processSimplifiedLine(s, _); } S preprocess(S s, O... _) { if (preprocessAtSelfToMyName && discordBotID != 0) s = replace(s, atSelf(), " " + myName + " "); if (dropPunctuation) s = dropPunctuation3_withAGIBlue(useAGIBlueForDropPunctuation, s); s = trim(simpleSpaces_noTok(s)); print("simplified >> " + quote(s)); ret s; } S myPrefix() { ret preprocessAtSelfToMyName ? myName + " " : (dropPunctuation ? replace(atSelf(), "@", "") /* @ is killed by preprocessing */ : atSelf()) + " "; } // extend me S processSimplifiedLine(S input, O... _) { new Matches m; input = dropPrefixOrNull(myPrefix(), input); if (input == null) null; if (eqicOneOf(input, "support channel", "support server", "support")) ret "Get support for me here: " + nextGenBotsDiscordInvite(); if (eqicOneOf(input, "source", "sources", "source code")) ret snippetLink(programID()); if (swic_trim(input, "add master ", m)) { try answer checkAuth(_); add(authorizedUsers, parseFirstLong(m.rest())); change(); ret "Okidoki. Have " + n2(l(authorizedUsers), "master"); } if (eqic(input, "masters")) ret empty(authorizedUsers) ? "I have no masters." : "My masters are: " + joinWithComma(map discordAtPlusID(authorizedUsers)); if (swic_trim(input, "delete master ", m)) { try answer checkAuth(_); remove(authorizedUsers, parseFirstLong(m.rest())); change(); ret "Okidoki. Have " + n2(l(authorizedUsers), "master"); } null; } bool authed(O... _) { ret contains(authorizedUsers, optPar userID(_)); } S checkAuth(O... _) { long userID = longPar userID(_); bool result = authed(_); print("Auth-checking user ID: " + userID + " => " + result); if (!result) ret "You are not authorized"; null; } }
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: | #1024519 |
Snippet name: | DynTalkBot - DynDiscordHopper + input simplification, onUserJoin, name, authorizedUsers |
Eternal ID of this version: | #1024519/36 |
Text MD5: | 1ec2536c44313dd2576cd6ee835261fd |
Transpilation MD5: | 7bb458347e7b4b574bc510b40067edb5 |
Author: | stefan |
Category: | javax / agi.blue |
Type: | JavaX fragment (include) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2019-09-08 15:11:48 |
Source code size: | 2831 bytes / 94 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 357 / 867 |
Version history: | 35 change(s) |
Referenced in: | [show references] |