The RUN_MS auto-leave was only armed inside announceReady(), which requires a fully successful join (DAVE/MLS op29/op30 -> mlsReady). When the E2EE handshake stalls after op26 key_package, announceReady never fires, so the "time-boxed" selfbot ran unbounded in a live channel. Arm RUN_MS at process startup instead, independent of handshake state, and make leaveAndExit idempotent so the ceiling, ready timer, and signal handlers can't double-fire. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
12 KiB
12 KiB