handle local debugging, fix create/get client promise chain, and track channels joined so we don't try to send messages when we're not on a channel