tonhowtf/omniget · error

não achei appid para: {} — cole o link da loja ou o número

Error message

não achei appid para: {} — cole o link da loja ou o número

What it means

run in protondb.rs bails with this message when none of the supplied inputs could be resolved to a Steam appid. resolve_targets returns (targets, unresolved); if targets is empty but unresolved is non-empty, every input the user gave was unrecognizable, and the error lists them joined by comma. Message in Portuguese: 'could not find appid for: {} — paste the store link or the number'.

Solutions

  1. Replace each listed input with its numeric Steam appid (e.g. '570')
  2. Paste the full store page URL (https://store.steampowered.com/app/<appid>/...) instead of a name or short link
  3. Check for typos/extra characters in the inputs and trim whitespace
  4. Provide at least one resolvable input, or set scan_library = true

Example fix

// before
run(ProtonOptions { inputs: vec!["Elden Ring".into()], .. }).await?;
// after
run(ProtonOptions { inputs: vec!["https://store.steampowered.com/app/1245620/ELDEN_RING/".into()], .. }).await?;
Defensive patterns

Strategy: validation

Validate before calling

fn looks_like_appid_or_store_link(input: &str) -> bool {
    let t = input.trim();
    (!t.is_empty() && t.chars().all(|c| c.is_ascii_digit()))
        || t.contains("store.steampowered.com/app/")
}

Type guard

fn is_resolvable_input(s: &str) -> bool {
    let t = s.trim();
    (!t.is_empty() && t.chars().all(|c| c.is_ascii_digit()))
        || t.contains("store.steampowered.com/app/")
}

Try / catch

match run(opts, progress).await {
    Ok(result) => handle(result),
    Err(e) if e.to_string().contains("não achei appid para") => {
        highlight_unresolved_inputs(&e.to_string());
    }
    Err(e) => eprintln!("protondb lookup failed: {e}"),
}

Prevention

When it happens

Trigger: Calling run with opts.inputs containing strings that resolve_targets cannot map to an appid (e.g. game names, malformed URLs, arbitrary text), with targets ending up empty.

Common situations: Pasting a game name instead of the store URL; pasting a shortened or regional store URL the parser doesn't recognize; typos in the appid such as letters mixed in; store page URL format changes after a Valve site update.

Understand the failure class

Background: "invalid id" errors: invalid identifier format — why libraries reject IDs before lookup, and how to fix them — this error's family across 37 libraries.

Related errors


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

Appendix: source

Thrown at src-tauri/omniget-core/src/core/tools/games/protondb.rs:314

        total: 0,
        trending_tier: String::new(),
        best_tier: String::new(),
        rank: tier_rank("pending"),
        url: store_url(app_id),
        cached: false,
        ok: true,
        error: None,
    }
}

pub async fn run(opts: ProtonOptions, progress: ProgressFn) -> anyhow::Result<ProtonResult> {
    let apps = steam::scan_apps(&steam::steam_libraries(&opts.steam_dirs));
    let (targets, unresolved) = resolve_targets(&opts.inputs, &apps, opts.scan_library);
    if targets.is_empty() {
        if unresolved.is_empty() {
            anyhow::bail!("informe um appid, um link da loja ou marque a biblioteca inteira");
        }
        anyhow::bail!(
            "não achei appid para: {} — cole o link da loja ou o número",
            unresolved.join(", ")
        );
    }

    let client = crate::core::tools::client()?;
    let total = targets.len() as u64;
    let mut entries: Vec<ProtonEntry> = Vec::new();
    let mut from_cache = 0u64;

    for (i, (app_id, name)) in targets.iter().enumerate() {
        report(
            &progress,
            ID,
            "progress",
            i as u64,
            Some(total),
            Some(name.clone()),

View on GitHub (pinned to 8600b91f42)