// Logic: asks Snippet MD5 Bot for current MD5 !752 m { static DiskTextMap map; // snippet ID to text p { map = new DiskTextMap("mymap"); startBot("Snippet MD5 Bot", "#1002079"); makeBot("Snippet Text Bot."); } static synchronized S answer(S s) { new Matches m; if (match3("what is the text of snippet *", s, m)) { S snippetID = formatSnippetID(m.unq(0)); S answer = sendToLocalBot("Snippet MD5 Bot", "what is the md5 of snippet *", snippetID); assertTrue(match("the md5 of snippet * is *", answer, m)); S md5 = m.unq(1); S text = map.get(snippetID); if (text == null || neq(md5(text), md5)) { text = loadSnippetVersion(snippetID, md5); if (text == null) ret "null"; map.put(snippetID, text); } ret format("The text of snippet * is *.", snippetID, text); } if (match3("clear snippet text cache", s, m)) { clear(); ret "OK."; } if (match3("get snippet text cache size", s, m)) { ret "Cache entries: " + map.size(); } ret null; } static synchronized void clear() { map.clear(); } }