sclass CruddieFollower { S cookie; int counter; swappable void newDialog() {} swappable void botUtterance(S html) {} *(S *cookie) {} // may block for 60 seconds public S get() { S src = loadPageWithParams("https://cruddie.site/bot/incremental", +cookie, n := counter); S newN = firstIntAsString_regexp(src); if (nempty(newN)) { if (cic(src, "NEW DIALOG -->")) newDialog(); n = parseInt(newN); } else doForEach botUtterance(regexpExtractAll([[bot-utterance">(.*?)<]], src)); ret html; } }