From b92cfea387c17fdca77cb5a9192616b1f63254b4 Mon Sep 17 00:00:00 2001 From: Oliver Rose Date: Sat, 24 Jan 2026 19:37:40 -0500 Subject: [PATCH 1/2] prevent pushing duplicate badges --- src/lib/handlers/seventv/entitlement-create.ts | 7 ++++++- src/lib/managers/badge-manager.ts | 15 +++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) 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..3e808df0 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 === id); + + if (idx === -1) { + badges.push(badge); + } else { + badges[idx] = badge; + } + } } From 4359c8b8307b23e744f45021d6b476d4b195d98b Mon Sep 17 00:00:00 2001 From: Oliver Rose Date: Sat, 24 Jan 2026 19:51:26 -0500 Subject: [PATCH 2/2] fix --- src/lib/managers/badge-manager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/managers/badge-manager.ts b/src/lib/managers/badge-manager.ts index 3e808df0..c318514c 100644 --- a/src/lib/managers/badge-manager.ts +++ b/src/lib/managers/badge-manager.ts @@ -131,7 +131,7 @@ export class BadgeManager extends SvelteMap { #insert(id: string, badge: Badge) { const badges = getOrInsert(this.users, id, []); - const idx = badges.findIndex((b) => b.id === id); + const idx = badges.findIndex((b) => b.id === badge.id); if (idx === -1) { badges.push(badge);