abstract sclass DynSayAndInputBot > DynPrintLog { S input; transient AbstractSayAndInputBot2 bot; void submitInput { setField(input := trim(input)); print("User: " + input); if (bot != null) bot.inputQueue.add(input); } visual centerAndSouthWithMargins(super.visualize(), dm_textFieldAndSubmit_q('input, 'submitInput, focusOnShow := true)); void runBot(AbstractSayAndInputBot2 bot) { this.bot = bot; runBot(); } void runBot { bot.say = (VF1) vfPrintWithPrefix("Bot: "); thread "Bot" { callF(bot); print("\n[end]"); } } start { logModuleOutput(); } }