diff --git a/src/lib/handlers/seventv/entitlement-create.ts b/src/lib/handlers/seventv/entitlement-create.ts index 7a49bf49..5a17e341 100644 --- a/src/lib/handlers/seventv/entitlement-create.ts +++ b/src/lib/handlers/seventv/entitlement-create.ts @@ -15,7 +15,12 @@ export default defineHandler({ const badge = app.badges.get(data.ref_id); if (!badge) return; - getOrInsert(app.badges.users, user.id, []).push(badge); + const badges = getOrInsert(app.badges.users, user.id, []); + + if (!badges.some((b) => b.id === badge.id)) { + badges.push(badge); + } + break; } diff --git a/src/lib/managers/badge-manager.ts b/src/lib/managers/badge-manager.ts index e03eb0ab..c318514c 100644 --- a/src/lib/managers/badge-manager.ts +++ b/src/lib/managers/badge-manager.ts @@ -79,7 +79,7 @@ export class BadgeManager extends SvelteMap { }); }); - getOrInsert(this.users, user.providerId, []).push(badge); + this.#insert(user.providerId, badge); } } @@ -124,8 +124,19 @@ export class BadgeManager extends SvelteMap { const badge = badges[badgeId]; for (const id of users) { - getOrInsert(this.users, id.toString(), []).push(badge); + this.#insert(id.toString(), badge); } } } + + #insert(id: string, badge: Badge) { + const badges = getOrInsert(this.users, id, []); + const idx = badges.findIndex((b) => b.id === badge.id); + + if (idx === -1) { + badges.push(badge); + } else { + badges[idx] = badge; + } + } }