!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 -> { new Matches m; s = simpleSpaces_noTok(s); 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 + " syntaxes")) ret backtickQuote(lines_rtrim(elementPlusList(myName + ": ...", syntaxes))); if (swic_trim(s, myName + " new syntax:", m)) { S syntax = unquote(m.rest()); if (!endsWithEllipsis(syntax)) ret "Shouldn't this end with \"...\"? >> " + syntax; syntax = trim(dropSuffix("...", syntax)) + " ..."; if (!syntaxes.add(syntax)) ret "I already know that syntax!"; change(); ret "Syntax added! You can try: " + backtickQuote(replaceSuffix("...", randomThingToGoogle(), syntax)); } 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?"; } }