diff --git a/apps/api/src/leaderboards/leaderboard.service.ts b/apps/api/src/leaderboards/leaderboard.service.ts index ebfbeaa87..94500a8f8 100644 --- a/apps/api/src/leaderboards/leaderboard.service.ts +++ b/apps/api/src/leaderboards/leaderboard.service.ts @@ -50,21 +50,22 @@ export abstract class LeaderboardService { const id = instance[idField] as unknown as string; - fields - .filter(([field]) => remove || typeof instance[field] === "number") - .forEach(([field, metadata]) => { - const value = instance[field] as unknown as number; - const key = `${name}.${String(field)}`; + for (const [field, metadata] of fields) { + const value = instance[field] as unknown as number; + const key = `${name}.${String(field)}`; - if (remove || value === 0 || Number.isNaN(value)) return pipeline.zrem(key, id); + if (remove || value === 0 || Number.isNaN(value) || typeof value !== "number") { + pipeline.zrem(key, id); + continue; + } - pipeline.zadd(key, value, id); + pipeline.zadd(key, value, id); - if (metadata.leaderboard.enabled && metadata.leaderboard.resetEvery) { - const time = this.getLeaderboardExpiryTime(metadata.leaderboard); - pipeline.expireat(key, time); - } - }); + if (metadata.leaderboard.enabled && metadata.leaderboard.resetEvery) { + const time = this.getLeaderboardExpiryTime(metadata.leaderboard); + pipeline.expireat(key, time); + } + } await pipeline.exec(); diff --git a/apps/discord-bot/src/commands/leaderboards/guild-leaderboard.argument.ts b/apps/discord-bot/src/commands/leaderboards/guild-leaderboard.argument.ts index 39309364c..edcb59762 100644 --- a/apps/discord-bot/src/commands/leaderboards/guild-leaderboard.argument.ts +++ b/apps/discord-bot/src/commands/leaderboards/guild-leaderboard.argument.ts @@ -15,7 +15,7 @@ import { Fuse } from "fuse.js"; import { Guild, LeaderboardScanner } from "@statsify/schemas"; import { removeFormatting } from "@statsify/util"; -const list = LeaderboardScanner.getLeaderboardMetadata(Guild).map( +const list = LeaderboardScanner.getLeaderboardFields(Guild).map( ([key, { leaderboard }]) => ({ value: key, name: removeFormatting(leaderboard.name), diff --git a/apps/discord-bot/src/commands/leaderboards/player-leaderboard.argument.ts b/apps/discord-bot/src/commands/leaderboards/player-leaderboard.argument.ts index 119e759cd..3725ef69f 100644 --- a/apps/discord-bot/src/commands/leaderboards/player-leaderboard.argument.ts +++ b/apps/discord-bot/src/commands/leaderboards/player-leaderboard.argument.ts @@ -34,7 +34,7 @@ const FUSE_OPTIONS = { }; const fields = entries.reduce((acc, [prefix, value]) => { - const list = LeaderboardScanner.getLeaderboardMetadata(value.type.type).map( + const list = LeaderboardScanner.getLeaderboardFields(value.type.type).map( ([key, { leaderboard }]) => ({ value: key, name: removeFormatting(leaderboard.name) }) ); diff --git a/packages/schemas/src/util/leaderboard-scanner.ts b/packages/schemas/src/util/leaderboard-scanner.ts index 849da7be1..8dd402a05 100644 --- a/packages/schemas/src/util/leaderboard-scanner.ts +++ b/packages/schemas/src/util/leaderboard-scanner.ts @@ -15,7 +15,7 @@ import { parseAdditionalFields } from "./parse-fields.js"; import type { Constructor } from "@statsify/util"; export class LeaderboardScanner { - public static getLeaderboardMetadata(constructor: Constructor) { + public static getLeaderboardFields(constructor: Constructor) { const metadata = MetadataScanner.scan(constructor); const fields = metadata.filter(([, { leaderboard }]) => leaderboard.enabled); @@ -23,10 +23,6 @@ export class LeaderboardScanner { return fields; } - public static getLeaderboardFields(constructor: Constructor) { - return this.getLeaderboardMetadata(constructor); - } - public static getLeaderboardField( constructor: Constructor, key: string,