Ignore teams from leaderboard

This commit is contained in:
Kalle
2024-11-11 21:59:25 +02:00
parent ea77ea361b
commit ce3cb6c137
2 changed files with 34 additions and 1 deletions

View File

@@ -5,6 +5,7 @@ import { COMMON_USER_FIELDS } from "~/utils/kysely.server";
import { ordinalToSp } from "../mmr/mmr-utils";
import {
DEFAULT_LEADERBOARD_MAX_SIZE,
IGNORED_TEAMS,
MATCHES_COUNT_NEEDED_FOR_LEADERBOARD,
} from "./leaderboards-constants";
@@ -91,7 +92,11 @@ export async function teamLeaderboardBySeason({
? filterOneEntryPerUser(entries)
: entries;
const withSharedTeam = resolveSharedTeam(oneEntryPerUser);
const withPower = addPowers(withSharedTeam);
const withIgnoredHandled = onlyOneEntryPerUser
? ignoreTeams({ season, entries: withSharedTeam })
: withSharedTeam;
const withPower = addPowers(withIgnoredHandled);
return addPlacementRank(withPower);
}
@@ -123,3 +128,24 @@ function resolveSharedTeam(entries: ReturnType<typeof filterOneEntryPerUser>) {
};
});
}
function ignoreTeams({
season,
entries,
}: { season: number; entries: ReturnType<typeof resolveSharedTeam> }) {
const ignoredTeams = IGNORED_TEAMS.get(season);
if (!ignoredTeams) return entries;
return entries.filter((entry) => {
if (
ignoredTeams.some((team) =>
team.every((userId) => entry.members.some((m) => m.id === userId)),
)
) {
return false;
}
return true;
});
}

View File

@@ -20,3 +20,10 @@ export const LEADERBOARD_TYPES = [
(id) => `XP-WEAPON-${id}`,
) as `XP-WEAPON-${(typeof mainWeaponIds)[number]}`[]),
] as const;
/** Teams that are ignored from the main leaderboard, because e.g. they want to qualify with another group.
* Map key is season.
*/
export const IGNORED_TEAMS: Map<number, number[][]> = new Map().set(5, [
[9403, 13562, 15916, 38062], // Snooze
]);