sendou.ink/scripts/nuke-reported-weapons.ts
Kalle ab1f5bebc1
Some checks failed
Tests and checks on push / run-checks-and-tests (push) Has been cancelled
Updates translation progress / update-translation-progress-issue (push) Has been cancelled
Refactor Seasons module
2025-05-13 21:23:36 +03:00

66 lines
1.7 KiB
TypeScript

import "dotenv/config";
import { db } from "~/db/sql";
import * as Seasons from "~/features/mmr/core/Seasons";
import { dateToDatabaseTimestamp } from "~/utils/dates";
import invariant from "~/utils/invariant";
import { logger } from "~/utils/logger";
const discordId = process.argv[2]?.trim();
invariant(discordId, "discord id is required (argument 1)");
async function main() {
const currentSeason = Seasons.current();
if (!currentSeason) {
logger.info("No current season found");
return;
}
const user = await db
.selectFrom("User")
.select(["User.id"])
.where("User.discordId", "=", discordId)
.executeTakeFirstOrThrow();
const groupMatchMaps = await db
.selectFrom("GroupMember")
.innerJoin("Group", "Group.id", "GroupMember.groupId")
.innerJoin("GroupMatch", (join) =>
join.on((eb) =>
eb.or([
eb("GroupMatch.alphaGroupId", "=", eb.ref("Group.id")),
eb("GroupMatch.bravoGroupId", "=", eb.ref("Group.id")),
]),
),
)
.innerJoin("GroupMatchMap", "GroupMatchMap.matchId", "GroupMatch.id")
.select("GroupMatchMap.id")
.where(
"GroupMatch.createdAt",
">",
dateToDatabaseTimestamp(currentSeason.starts),
)
.where(
"GroupMatch.createdAt",
"<",
dateToDatabaseTimestamp(currentSeason.ends),
)
.where("GroupMember.userId", "=", user.id)
.where("GroupMatchMap.winnerGroupId", "is not", null)
.execute();
const groupMatchMapIds = groupMatchMaps.map((gmm) => gmm.id);
await db
.deleteFrom("ReportedWeapon")
.where("userId", "=", user.id)
.where("ReportedWeapon.groupMatchMapId", "in", groupMatchMapIds)
.execute();
logger.info(
`Deleted ${groupMatchMapIds.length} reported weapons for user ${discordId}`,
);
}
void main();