add better channel joining logic