diff --git a/src/runners/individualRunner.ts b/src/runners/individualRunner.ts index 6c7e452..7f93356 100644 --- a/src/runners/individualRunner.ts +++ b/src/runners/individualRunner.ts @@ -59,12 +59,14 @@ export async function scrapeInvidualSource( if (!output) throw new Error('output is null'); - // filter output with only valid embeds that are not disabled - output.embeds = output.embeds.filter((embed) => { - const e = list.embeds.find((v) => v.id === embed.embedId); - if (!e || e.disabled) return false; - return true; - }); + // filter output with only valid embeds that are not disabled, and remove duplicates + output.embeds = output.embeds + .filter((embed) => { + const e = list.embeds.find((v) => v.id === embed.embedId); + if (!e || e.disabled) return false; + return true; + }) + .filter((v, i, a) => a.findIndex((t) => t.embedId === v.embedId) === i); if ((!output.stream || output.stream.length === 0) && output.embeds.length === 0) throw new NotFoundError('No streams found'); diff --git a/src/runners/runner.ts b/src/runners/runner.ts index c3bc9eb..60f3385 100644 --- a/src/runners/runner.ts +++ b/src/runners/runner.ts @@ -112,12 +112,13 @@ export async function runAllProviders(list: ProviderList, ops: ProviderRunnerOpt }; } - // filter disabled and run embed scrapers on listed embeds + // filter disabled, filter out duplicates, run embed scrapers on listed embeds const sortedEmbeds = output.embeds .filter((embed) => { const e = list.embeds.find((v) => v.id === embed.embedId); return e && !e.disabled; }) + .filter((v, i, a) => a.findIndex((t) => t.embedId === v.embedId) === i) .sort((a, b) => embedIds.indexOf(a.embedId) - embedIds.indexOf(b.embedId)); if (sortedEmbeds.length > 0) {