!7 // cmodule fails because of loadPageWithUserAgent module GBot > DynDiscordHopper { S myName = "GBot"; int defaultResults = 1; Set syntaxes = synchroSet(); @Override S answer(S input, Map map) { ret mapEachLine_tlft_nempties(input, s -> { print("Guild: " + map.get('guildID)); new Matches m; s = simpleSpaces_noTok(s); s = regexpReplace_direct(s, "\\s+:", ":"); if (eqicOneOf(replaceIC(words2_spaces(s), " show ", " "), myName + " Help", myName + " info", myName + " commands")) ret loadSnippet(#1024125); if (swic_trim(s, myName + ":", m)) ret doIt(m.rest()); if (swic_trim(s, myName + " default results:", m)) { setField(defaultResults := parseInt(m.rest()); ret "OK, returning " + nResults(defaultResults) + " from now on"; } if (eqic(s, myName + " default results")) ret "I'm returning " + nResults(defaultResults) + " by default"; if (eqic(s, myName + " syntaxes")) ret backtickQuote(lines_rtrim(elementPlusList(myName + ": ...", syntaxes))); if (swic_trim_any(s, m, myName + " new syntax:", myName + " add syntax:")) { S syntax = massageSyntax(m.rest()); if (!endsWithEllipsis(syntax)) ret "Shouldn't this end with \"...\"? >> " + syntax; if (!syntaxes.add(syntax)) ret "I already know that syntax!"; change(); ret "Syntax added! You can try: " + backtickQuote(replaceSuffix("...", randomThingToGoogle(), syntax)); } if (swic_trim(s, myName + " forget syntax:", m)) { S syntax = massageSyntax(m.rest()); if (!syntaxes.remove(syntax)) ret "Syntax not found"; change(); ret "Syntax removed!"; } if (ellipsisToDotPlusRegexpIC_matchAny(syntaxes, s, m)) ret doIt(m.rest()); null; }); } S doIt(S query) { LS l = regexpICFullMatch_groups("(\\d+) results? for[ :](.+)", query); int results = defaultResults; if (l != null) { results = parseInt(first(l)); query = unquote(trim(last(l))); } ret discord_google(query, +results); } S randomThingToGoogle() { ret "why are penguins black and white?"; } S massageSyntax(S syntax) { syntax = unquote(syntax); ret trim(dropSuffix("...", syntax)) + " ..."; } }