Refactor badge calculation logic

This commit is contained in:
Kalle (Sendou)
2021-06-23 00:55:32 +03:00
parent 715a0efb4c
commit 2e57202ec9
2 changed files with 48 additions and 128 deletions

View File

@@ -2,7 +2,7 @@ import { Button } from "@chakra-ui/button";
import { Image as ChakraImage } from "@chakra-ui/image";
import { Flex, Text } from "@chakra-ui/layout";
import { Fragment, useEffect, useMemo, useState } from "react";
import { wonITZCount, wonTournamentCount } from "utils/constants";
import { wonITZCount } from "utils/constants";
interface BadgesProps {
userId: number;
@@ -11,6 +11,42 @@ interface BadgesProps {
peakXP?: number;
}
const regularTournamentWinners: {
badgeName: string;
name: string;
winnerDiscordIds: string;
}[] = [
{
badgeName: "pair",
name: "League Rush (Pair)",
winnerDiscordIds:
"453753483427053568,398818695608270849,776911543216111648,393908122525368331",
},
{
badgeName: "quad",
name: "League Rush (Quad)",
winnerDiscordIds: "",
},
{
badgeName: "lobster",
name: "Lobster Crossfire",
winnerDiscordIds:
"105390854063034368,109804061900992512,151192098962407424,260602342309756940,266716798945067010,244246880442122250,431923570063441922,114889120379043843",
},
{
badgeName: "monday",
name: "Monday Afterparty",
winnerDiscordIds:
"189021480527331328,397097842411569152,274245305363464192,245195310593212417,427319047785545759,186543007850299393,125301875863060480,328641373655924739,274245305363464192,143918846535925761,147036636608331779,260602342309756940,105390854063034368,189125119937871872,516036546370207764,164734950686326784,133616977968103424,323496682920738817,353199183345352704,207150814735761408,273503438124613632,381129695980290050,344096615033995266,265816182374924298,427221050330316814,724313854536056862,161173517163954176,441232639358402560,108951379095072768,160778600834924544,377510502139691018,338470854339854346,182892865695907840,331170488602591242,310359084387794946,331170488602591242,164734950686326784,133616977968103424,353199183345352704,323496682920738817,675752882682724352,403598012888252426,250689440056475648,410342922253500416,164748705713356800,619566583970529314,448493571419537428,250689440056475648,784695580920119297,393411373289177098,350225756082798593,274693882221166597,436528474807730176,108951379095072768,441232639358402560,477555922026102818,412203683024076800,92909500100513792,99931397451419648,81154649993785344,439066642920505344",
},
{
badgeName: "triton",
name: "Triton-Cup",
winnerDiscordIds:
"277760673436401664,317021572470669312,347127232839417856,149504203654430720,207150814735761408,304337232808902668,403962004739588096,381129695980290050,158163424004538369,330044344738381834,526883393485406208,340583035542175744,105390854063034368,151192098962407424,109804061900992512,115572122482507782,377510502139691018,265816182374924298,323496682920738817,182892865695907840",
},
];
const usersBadges = ({
userId,
userDiscordId,
@@ -101,81 +137,20 @@ const usersBadges = ({
// Other tournaments
if (
wonTournamentCount({
tournament: "LEAGUE_RUSH_PAIR",
discordId: userDiscordId,
}) > 0
) {
result.push({
src: "pair.gif",
description: "Awarded for winning League Rush (Pair)",
count: wonTournamentCount({
tournament: "LEAGUE_RUSH_PAIR",
discordId: userDiscordId,
}),
});
}
for (const tournament of regularTournamentWinners) {
const count = tournament.winnerDiscordIds
.split(",")
.reduce(
(count, winnersId) => (winnersId === userDiscordId ? count + 1 : count),
0
);
if (
wonTournamentCount({
tournament: "LEAGUE_RUSH_QUAD",
discordId: userDiscordId,
}) > 0
) {
result.push({
src: "quad.gif",
description: "Awarded for winning League Rush (Quad)",
count: wonTournamentCount({
tournament: "LEAGUE_RUSH_QUAD",
discordId: userDiscordId,
}),
});
}
if (count === 0) continue;
if (
wonTournamentCount({
tournament: "LOBSTER_CROSSFIRE",
discordId: userDiscordId,
}) > 0
) {
result.push({
src: "lobster.gif",
description: "Awarded for winning Lobster Crossfire",
count: wonTournamentCount({
tournament: "LOBSTER_CROSSFIRE",
discordId: userDiscordId,
}),
});
}
if (
wonTournamentCount({
tournament: "MONDAY_AFTERPARTY",
discordId: userDiscordId,
}) > 0
) {
result.push({
src: "monday.gif",
description: "Awarded for winning Monday Afterparty",
count: wonTournamentCount({
tournament: "MONDAY_AFTERPARTY",
discordId: userDiscordId,
}),
});
}
if (
wonTournamentCount({ tournament: "TRITON_CUP", discordId: userDiscordId }) >
0
) {
result.push({
src: "triton.gif",
description: "Awarded for winning Triton-Cup",
count: wonTournamentCount({
tournament: "TRITON_CUP",
discordId: userDiscordId,
}),
src: `${tournament.badgeName}.gif`,
description: `Awarded for winning ${tournament.name}`,
count,
});
}

View File

@@ -341,58 +341,3 @@ export const wonITZCount = (
return result;
};
const TRITON_CUP_WINNERS =
"277760673436401664,317021572470669312,347127232839417856,149504203654430720,207150814735761408,304337232808902668,403962004739588096,381129695980290050,158163424004538369,330044344738381834,526883393485406208,340583035542175744,105390854063034368,151192098962407424,109804061900992512,115572122482507782,377510502139691018,265816182374924298,323496682920738817,182892865695907840";
const MONDAY_AFTERPARTY_WINNERS =
"189021480527331328,397097842411569152,274245305363464192,245195310593212417,427319047785545759,186543007850299393,125301875863060480,328641373655924739,274245305363464192,143918846535925761,147036636608331779,260602342309756940,105390854063034368,189125119937871872,516036546370207764,164734950686326784,133616977968103424,323496682920738817,353199183345352704,207150814735761408,273503438124613632,381129695980290050,344096615033995266,265816182374924298,427221050330316814,724313854536056862,161173517163954176,441232639358402560,108951379095072768,160778600834924544,377510502139691018,338470854339854346,182892865695907840,331170488602591242,310359084387794946,331170488602591242,164734950686326784,133616977968103424,353199183345352704,323496682920738817,675752882682724352,403598012888252426,250689440056475648,410342922253500416,164748705713356800,619566583970529314,448493571419537428,250689440056475648,784695580920119297,393411373289177098,350225756082798593,274693882221166597,436528474807730176,108951379095072768,441232639358402560,477555922026102818,412203683024076800,92909500100513792,99931397451419648,81154649993785344,439066642920505344";
const LOBSTER_CROSSFIRE =
"105390854063034368,109804061900992512,151192098962407424,260602342309756940,266716798945067010,244246880442122250,431923570063441922,114889120379043843";
const LEAGUE_RUSH_PAIR =
"453753483427053568,398818695608270849,776911543216111648,393908122525368331";
const LEAGUE_RUSH_QUAD = "";
export const wonTournamentCount = ({
tournament,
discordId,
}: {
tournament:
| "TRITON_CUP"
| "MONDAY_AFTERPARTY"
| "LOBSTER_CROSSFIRE"
| "LEAGUE_RUSH_PAIR"
| "LEAGUE_RUSH_QUAD";
discordId: string;
}) => {
let winnersString = "";
switch (tournament) {
case "TRITON_CUP":
winnersString = TRITON_CUP_WINNERS;
break;
case "MONDAY_AFTERPARTY":
winnersString = MONDAY_AFTERPARTY_WINNERS;
break;
case "LOBSTER_CROSSFIRE":
winnersString = LOBSTER_CROSSFIRE;
break;
case "LEAGUE_RUSH_PAIR":
winnersString = LEAGUE_RUSH_PAIR;
break;
case "LEAGUE_RUSH_QUAD":
winnersString = LEAGUE_RUSH_QUAD;
break;
default:
console.error(`Invalid tournament: ${tournament}`);
}
return winnersString
.split(",")
.reduce(
(count, winnersId) => (winnersId === discordId ? count + 1 : count),
0
);
};