!7 !include once #1017764 // VirtualMechLists sS mechLibID = #1400124; static O onOutput; // VF1 static L bots; abstract sclass AbstractThinkBot { transient VF1 postMessage; transient new L recentHistory; abstract void thinkAbout(S input); void postMessage(S s) { callF(postMessage, s); } } p { mech_useLibrary(mechLibID); L> classes = botClasses(); print("Have think classes: " + classNames(classes)); makeBots(); bot(); } static L> botClasses() { ret myNonAbstractClassesImplementing(AbstractThinkBot); } svoid makeBots() { bots = map nuWithoutArguments(botClasses()); } sS answer(S s) { final new L output; for (AbstractThinkBot bot : bots) pcall { bot.postMessage = voidfunc(S s) { print(">> " + s); pcallF(onOutput, s); output.add(s); }; temp tempSetThreadLocal(telegram_msg_tl(), new Map); bot.thinkAbout(s); } ret rtrim(lines(output)); }