diff --git a/src/actions/admin-badges.ts b/src/actions/admin-badges.ts index af74f842..431abe8d 100644 --- a/src/actions/admin-badges.ts +++ b/src/actions/admin-badges.ts @@ -31,14 +31,17 @@ export async function giveBadge(formData: FormData): Promise { } // Process each user/code combination + let granted = false; for (const userId of userIds) { for (const code of codes) { - const cid = String(Number(code) || code); if (!(Number(userId) > 0) || code.length === 0) continue; + // Truncate badge code to 32 characters. + const truncatedCode = code.slice(0, 32); + // Fire the emulator command so the badge appears live for online users. try { - await rcon.giveBadge(Number(userId), cid); + await rcon.giveBadge(Number(userId), truncatedCode); } catch { // ignore rcon errors per pair } @@ -53,7 +56,7 @@ export async function giveBadge(formData: FormData): Promise { .where( and( eq(UsersBadges.userId, Number(userId)), - eq(UsersBadges.badgeCode, code), + eq(UsersBadges.badgeCode, truncatedCode), ), ) .limit(1); @@ -65,13 +68,17 @@ export async function giveBadge(formData: FormData): Promise { const slotId = (agg?.maxSlot ?? 0) + 1; await db .insert(UsersBadges) - .values({ userId: Number(userId), slotId, badgeCode: code }); + .values({ userId: Number(userId), slotId, badgeCode: truncatedCode }); } } catch { // Best-effort: the RCON grant already succeeded for online users. } - } + granted = true; + } + } + + if (granted) { revalidatePath("/admin/badges"); } }