abstract sclass DynGazelleBot > DynPrintLogAndEnabled { switchable S _user; switchable S _botToken; new Gazelle_GrabPostsLoop grabLoop; start { addAll(grabLoop.fields, "type", "creating", "postRefs", "postRefTags"); dm_startThread("Post Grab Loop", r runGrabLoop); } void runGrabLoop { dm_copyFieldsToObject(grabLoop, "_user", "_botToken", "enabled"); grabLoop.verbose = true; grabLoop.onChange(r change); grabLoop.handlePost = post -> enter { handlePost(post); }; grabLoop.run(); } swappable void handlePost(GazellePost post) { } void rescan { grabLoop.reset(); } void enhanceFrame(Container f) { super.enhanceFrame(f); internalFramePopupMenuItem(f, "Rescan all posts", rEnter rescan); } }