mirror of
https://github.com/zkldi/Tachi.git
synced 2026-10-05 05:18:12 +03:00
add iidx-versions fixer
This commit is contained in:
+2
-1
@@ -19,4 +19,5 @@ scripts/validate-database-errs/*
|
||||
# we don't need to commit
|
||||
scripts/__MDB-PARSERS/*/*
|
||||
!scripts/__MDB-PARSERS/*/main.ts
|
||||
!scripts/__MDB-PARSERS/*/convert.ts
|
||||
!scripts/__MDB-PARSERS/*/convert.ts
|
||||
scripts/single-use/fix-iidx-versions/versions.json
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
import db from "../../../src/db/db";
|
||||
import { ChartDocument } from "kamaitachi-common";
|
||||
|
||||
db.charts.iidx
|
||||
.find({})
|
||||
// @ts-expect-error it exists
|
||||
.each(async (c: ChartDocument<"iidx:SP" | "iidx:DP">, { pause, resume }: any) => {
|
||||
pause();
|
||||
|
||||
const song = (await db.songs.iidx.findOne({ id: c.songID }))!;
|
||||
|
||||
let versions = [];
|
||||
|
||||
if (song.firstVersion === "27") {
|
||||
versions = ["27", "28", "27-omni", "28-omni"];
|
||||
} else if (song.firstVersion === "28") {
|
||||
versions = ["28", "28-omni"];
|
||||
} else if (song.firstVersion === "inf") {
|
||||
versions = ["inf"];
|
||||
} else if (song.firstVersion === "inf2020") {
|
||||
versions = ["inf2020"];
|
||||
} else {
|
||||
versions = ["26", "27", "28", "26-omni", "27-omni", "28-omni"];
|
||||
}
|
||||
|
||||
await db.charts.iidx.update({ _id: c._id }, { $set: { versions } });
|
||||
|
||||
resume();
|
||||
})
|
||||
.then(() => console.log("done"));
|
||||
@@ -0,0 +1,96 @@
|
||||
/* eslint-disable no-await-in-loop */
|
||||
import db from "../../../src/db/db";
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import CreateLogCtx from "../../../src/common/logger";
|
||||
import { FindSongOnTitleInsensitive } from "../../../src/common/database-lookup/song";
|
||||
const logger = CreateLogCtx("scripts/single-use/fix-iidx-versions/update-versions.ts");
|
||||
|
||||
const comicallyLargeJSONData = JSON.parse(
|
||||
fs.readFileSync(path.join(__dirname, "./versions.json"), "utf-8")
|
||||
);
|
||||
|
||||
const DIFF_MAP = {
|
||||
A: "ANOTHER",
|
||||
H: "HYPER",
|
||||
N: "NORMAL",
|
||||
B: "BEGINNER",
|
||||
X: "LEGGENDARIA",
|
||||
} as any;
|
||||
|
||||
function ConvertVersion(c: string) {
|
||||
if (c.startsWith("AC")) {
|
||||
return c.split("AC")[1];
|
||||
} else if (c.startsWith("OM")) {
|
||||
return `${c.split("OM")[1]}-omni`;
|
||||
} else if (c.startsWith("CS")) {
|
||||
return `${c.split("CS")[1]}-cs`;
|
||||
} else if (c === "INF") {
|
||||
return "inf";
|
||||
} else if (c === "BMUS") {
|
||||
return "bmus";
|
||||
} else {
|
||||
logger.error(`Invalid Chart Version ${c}.`);
|
||||
throw new Error("Invalid Chart Version");
|
||||
}
|
||||
}
|
||||
|
||||
(async () => {
|
||||
for (const data of comicallyLargeJSONData) {
|
||||
const song = await FindSongOnTitleInsensitive("iidx", data["MUSIC NAME"]);
|
||||
|
||||
if (!song) {
|
||||
logger.error(`Can't find song with title ${data["MUSIC NAME"]}.`);
|
||||
continue;
|
||||
}
|
||||
|
||||
const playtype = data.STYLE === "S" ? "SP" : "DP";
|
||||
|
||||
const difficulty = DIFF_MAP[data.DIFF];
|
||||
|
||||
const relevantVersions = [
|
||||
"OM27",
|
||||
"OM26",
|
||||
"AC27",
|
||||
"AC26",
|
||||
"INF",
|
||||
"CS16",
|
||||
"CS15",
|
||||
"CS14",
|
||||
"CS13",
|
||||
"CS12",
|
||||
"CS11",
|
||||
"CS10",
|
||||
"CS9",
|
||||
"CS8",
|
||||
"CS7",
|
||||
"BMUS",
|
||||
"CS6",
|
||||
"CS5",
|
||||
"CS4",
|
||||
"CS3",
|
||||
]
|
||||
.filter((e) => data[e] === "1")
|
||||
.map(ConvertVersion);
|
||||
|
||||
if (!relevantVersions.includes("27-omni") && !relevantVersions.includes("inf2020")) {
|
||||
logger.warn(`Song ${song.title} (${playtype} ${difficulty}) has no relevant versions.`);
|
||||
continue;
|
||||
}
|
||||
|
||||
// logger.info(relevantVersions);q
|
||||
|
||||
const chart = await db.charts.iidx.findOne({ songID: song.id, difficulty, playtype });
|
||||
|
||||
if (!chart) {
|
||||
logger.error(`Can't find chart ${song.title} (${playtype} ${difficulty})`);
|
||||
continue;
|
||||
}
|
||||
|
||||
await db.charts.iidx.update({ _id: chart._id }, { $set: { versions: relevantVersions } });
|
||||
}
|
||||
|
||||
logger.info("done");
|
||||
|
||||
process.exit(0);
|
||||
})();
|
||||
Reference in New Issue
Block a user