tonhowtf/omniget · error

esse link não tem parte de vídeo com comentários — abra uma…

Error message

esse link não tem parte de vídeo com comentários — abra uma parte específica

What it means

A validation guard in the danmaku export flow: after resolving the b23 short link and parsing the page, collect_parts found no video part that carries comments. The URL points at a multi-part entry or playlist landing page rather than a concrete video part, so there is no cid to fetch danmaku for.

Solutions

  1. Open a specific part/page of the video (e.g. ?p=2 or the part URL) instead of the series landing link
  2. Copy the link directly from the player page of the part you want
  3. Check that the link really points at a normal video (not an article or live room)
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at src-tauri/src/platforms/bilibili/danmaku/export.rs:114 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12). Data as JSON: /api/errors/b9f16e5f45c6dc22. Report an issue: GitHub.

Appendix: source

Thrown at src-tauri/src/platforms/bilibili/danmaku/export.rs:114

        Some(4),
        Some("resolvendo o link".into()),
    );
    let mut effective = url.to_string();
    if url_kind::is_b23_short(&effective) {
        match url_kind::resolve_b23(&client, &effective).await {
            Ok(full) => effective = full,
            Err(e) => return Err(friendly(e, with_account)),
        }
    }
    let kind = url_kind::detect(&effective)
        .map_err(|_| anyhow!("não reconheci um vídeo do Bilibili em: {}", url))?;
    let parsed = parser::parse(&client, &kind)
        .await
        .map_err(|e| friendly(e, with_account))?;

    let parts = collect_parts(&parsed);
    if parts.is_empty() {
        return Err(anyhow!(
            "esse link não tem parte de vídeo com comentários — abra uma parte específica"
        ));
    }
    let wanted = if opts.page > 0 {
        opts.page
    } else {
        page_from_kind(&kind)
    };
    let part = pick_part(&parts, wanted).ok_or_else(|| {
        anyhow!(
            "a parte {} não existe; esse vídeo tem {}",
            wanted,
            describe_pages(&parts)
        )
    })?;

    let duration = if part.duration_secs > 0 {
        part.duration_secs

View on GitHub (pinned to 8600b91f42)