sclass MsgOut extends DynamicObject { S buttonsIntro; LS buttons; S placeholder; S defaultInput; bool isEmpty() { ret empty(buttons); } } sclass Msg extends DynamicObject { long time; bool fromUser; S text; MsgOut out; *() {} *(bool *fromUser, S *text) { time = now(); } toString { ret "[" + time + "] " + (fromUser ? "User" : "Bot") + ": " + text; } }