sclass MsgOut extends DynamicObject { S buttonsIntro; LS buttons; S placeholder; S defaultInput; } sclass Msg extends DynamicObject { long time; bool fromUser; S text; MsgOut out; *() {} *(bool *fromUser, S *text) { time = now(); } } concept Conversation { bool authed; S cookie, ip; new LL oldDialogs; new L msgs; void add(Msg m) { syncAdd(msgs, m); change(); vmBus_send chatBot_messageAdded(mc(), this, m); } int allCount() { ret lengthLevel2(oldDialogs) + l(msgs); } int archiveSize() { ret lengthLevel2(oldDialogs); } }