{"record":{"id":"364a1109afe4658c","repo":"tonhowtf/omniget","slug":"nenhum-emote-encontrado-confira-o-canal-e-deixe-pelo-menos","errorCode":null,"errorMessage":"nenhum emote encontrado — confira o canal e deixe pelo menos um provedor ligado","messagePattern":"nenhum emote encontrado — confira o canal e deixe pelo menos um provedor ligado","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src-tauri/omniget-core/src/core/tools/twitch/emotes.rs","lineNumber":657,"sourceCode":"            match json_get(&http, &url).await {\n                Ok(v) => {\n                    if let Some(set) = v.get(\"emote_set\") {\n                        items.extend(parse_7tv(set, \"channel\"));\n                    }\n                }\n                Err(e) => tracing::warn!(\"7TV do canal falhou: {}\", e),\n            }\n        }\n        if opts.global {\n            match json_get(&http, \"https://7tv.io/v3/emote-sets/global\").await {\n                Ok(v) => items.extend(parse_7tv(&v, \"global\")),\n                Err(e) => tracing::warn!(\"7TV global falhou: {}\", e),\n            }\n        }\n    }\n\n    if items.is_empty() {\n        return Err(anyhow!(\n            \"nenhum emote encontrado — confira o canal e deixe pelo menos um provedor ligado\"\n        ));\n    }\n\n    let (mut items, duplicates) = dedupe(items);\n    items.sort_by(|a, b| {\n        a.kind\n            .cmp(&b.kind)\n            .then_with(|| a.provider.cmp(&b.provider))\n            .then_with(|| a.code.to_lowercase().cmp(&b.code.to_lowercase()))\n    });\n\n    // Nome de arquivo e pasta antes de baixar, para o download ser paralelo.\n    let root = PathBuf::from(&opts.out_dir).join(format!(\"{}-emotes\", sanitize_name(&label)));\n    let mut taken: HashMap<String, HashSet<String>> = HashMap::new();\n    let mut planned: Vec<(usize, PathBuf)> = Vec::new();\n    for (i, e) in items.iter_mut().enumerate() {\n        let folder = if e.kind == \"badge\" {","sourceCodeStart":639,"sourceCodeEnd":675,"githubUrl":"https://github.com/tonhowtf/omniget/blob/8600b91f4246848bac346874daa9e61c1fc5677a/src-tauri/omniget-core/src/core/tools/twitch/emotes.rs#L639-L675","documentation":"After collecting emotes from all enabled providers (Twitch, BTTV, FFZ, 7TV), run() throws when the items list is empty. This prevents the tool from continuing to dedupe/sort/download nothing and gives an actionable message naming both likely causes: wrong channel and disabled providers.","triggerScenarios":"Calling the emotes tool with a channel that has no fetchable emotes from any enabled provider, or with all provider backends disabled in the options, or when every provider request failed but its error was only logged (e.g. the 7TV warn in the source).","commonSituations":"Typo in the channel login combined with per-provider error swallowing; running with provider flags turned off; a brand-new channel with no custom emotes; network/proxy failures that made each provider silently fail.","solutions":["Re-check the channel name/login for typos","Enable at least one provider (Twitch/BTTV/FFZ/7TV) in the tool options","Run against a channel known to have emotes to verify the setup","Check logs for per-provider warnings (e.g. '7TV global falhou') indicating network or API failures"],"exampleFix":"// before\nlet opts = EmoteOpts { channel: \"xqcoww\".into(), bttv: false, ffz: false, seven_tv: false, .. };\n// after\nlet opts = EmoteOpts { channel: \"xqc\".into(), bttv: true, ffz: true, seven_tv: true, .. };","handlingStrategy":"validation","validationCode":"// Enable at least one provider and confirm the channel is valid before running.\nlet any_provider = opts.twitch || opts.bttv || opts.ffz || opts.seven_tv;\nlet valid_channel = opts.channel.trim().is_empty()\n    || opts.channel.split('/').last().map_or(false, |l| !l.is_empty());\nif !any_provider || !valid_channel {\n    eprintln!(\"Enable a provider and check the channel name\");\n    return Ok(());\n}","typeGuard":null,"tryCatchPattern":"match run(opts).await {\n    Err(e) if e.to_string().contains(\"nenhum emote encontrado\") => {\n        eprintln!(\"No emotes: verify channel and enable at least one provider\");\n    }\n    other => other?,\n}","preventionTips":["Check the channel has emotes on twitch.tv before running","Always leave at least one provider enabled","Watch logs for silent per-provider failures (e.g. 7TV warnings)","Test with a well-known channel (e.g. xqc) to validate setup"],"tags":["twitch","emotes","empty-result","configuration"],"backgroundTag":"empty-result-set","analyzedSha":"8600b91f4246848bac346874daa9e61c1fc5677a","analyzedAt":"2026-09-12T14:29:19.317Z","contentChangedAt":"2026-09-12T14:29:19.317Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}