mirror of
https://github.com/zkldi/Tachi.git
synced 2026-10-01 19:38:13 +03:00
355 lines
9.5 KiB
JavaScript
355 lines
9.5 KiB
JavaScript
const fetch = require("node-fetch");
|
||
const { MutateCollection, ReadCollection, CreateChartID } = require("../util");
|
||
const logger = require("../logger");
|
||
|
||
const tableInfo = {
|
||
name: "発狂PMSデータベース(lv46~)",
|
||
symbol: "P●",
|
||
data_url: "https://pmsdifficulty.xxxxxxxx.jp/insane_pmsdatabase/insane_pmsdatabase_score.json",
|
||
level_order: [
|
||
1,
|
||
2,
|
||
3,
|
||
4,
|
||
5,
|
||
6,
|
||
7,
|
||
8,
|
||
9,
|
||
10,
|
||
11,
|
||
12,
|
||
13,
|
||
14,
|
||
15,
|
||
16,
|
||
17,
|
||
18,
|
||
19,
|
||
20,
|
||
"!i",
|
||
"?",
|
||
"◆",
|
||
"~",
|
||
].map((e) => e.toString()),
|
||
};
|
||
|
||
const hasRandom = [
|
||
"769aac4e9bad64547438251f860a0aea",
|
||
"633943accbfaf1e782e9aa13229093c3",
|
||
"7c305b8a003d4578b58cd26236f29d10",
|
||
"8729dd951263fa4636e54ff191b864c4",
|
||
"13203d1e1076b42d3e4bb429870c5ada",
|
||
"4cea997415cc8f2be6b61667b01913f3",
|
||
"64c61e76a8173efa4cf0b9b5554813ed",
|
||
"78182197c48a3db307ecbc4d9df83954",
|
||
"2ff8c8b0a5b356e99a9f8a2bf9da2832",
|
||
"619c8357df2399ae18e22c4e36b2be95",
|
||
"188ac44b91c8f97436dd74b2d6825f2e",
|
||
"ff2d2ffa4ae22da44b8cc3f20597a899",
|
||
"778aeea01fdea30a4287e7b2eb19ee11",
|
||
"2ea031596696506e9d6d58354399e453",
|
||
"507bc8bb28eaa904942a630b09155b32",
|
||
"a1089fb46ad31d4f2e5bdcb89c4ca450",
|
||
"a4cab8697eb3d01da02e8f919a6aa623",
|
||
"8ed1cf85741113aaf857e2965d4e4272",
|
||
"6dd9ab107eb20bbaeea02fa3ec0f33d2",
|
||
"00351165ad4deb19dd03e059138a4a8d",
|
||
"836313ed8fc678a72b7870704c1238dd",
|
||
"be5fa66cebdc93fecbe24d8374bded0d",
|
||
"570c7e899e1cade06de5ebcbf52d9c02",
|
||
"9699fa026cb94b3c120114dd3311d70a",
|
||
"b6686bf87b0109510a3f65738868b197",
|
||
"a65116913eb65b1ecdd2f49aa4fe3d0b",
|
||
"b65a3e717c68561ae9804001fa534fa5",
|
||
"623c71599979807ce585c0b520fb79ca",
|
||
"715fa80618eeb3c0e2aa8219ef5a5207",
|
||
"117d4598613c124b363561118808a13d",
|
||
"a5a9774d73b86d4417da071e86d3e3c0",
|
||
"578dc4c94adf0c34b45663eb4a85a838",
|
||
"caf153b8021978ae8f9df99c2af233d9",
|
||
"89dfa8569d80c9740b4688c0c4817333",
|
||
"ed7212665806b5001731bf221739ed36",
|
||
"25356f8d57abcdf0b06b8e5602e0ccf1",
|
||
"1824aa65b7e6c8b7723e635ad6639101",
|
||
"b01d663a2a02c660981056d7f16df586",
|
||
"9bcc87ca47c213d47c910eb42784a36b",
|
||
"df81bc8022bd51e2e17dd9738b452041",
|
||
"a8caeb99af594f40f7fff48b32066f89",
|
||
"608bf3db51cd9150e2299ec51f4100ca",
|
||
"4d1b54f56bde5b2279a44fdfe096413f",
|
||
"0c10a05600ea952624c929253bf4ce8a",
|
||
"6df46e4c7f11a01eb2a362c02f17ed22",
|
||
"9ff5bdd19778f4fa67984b5b7492e036",
|
||
"10b1f6d46172ca42292dd53533670daa",
|
||
"97aec799b90fd5bea919ad7eb8ae1e5e",
|
||
"010c173afbaa3eb6d78005836f687a10",
|
||
"2c1518c284eef37d9710dca5236d545e",
|
||
"ab6b23baf829811a17ac367aae043b19",
|
||
"e8c0d51d4086da5ab5c8f61e69397615",
|
||
"cff001e1b62d1b725ce16bf5a1065d14",
|
||
"1b823369559fe3222934b016b661ae12",
|
||
"a1dc473d8b85302571f25b6a93269d26",
|
||
"5e8182cfe19b53c915aa89afc9e069c0",
|
||
"6e98007ab76c890a7dc7a7b9a7f0ee21",
|
||
"886b376a46a7f9c397b62e539ed294bc",
|
||
"28846fa5c003b5228dea15d9588b26ef",
|
||
"a1a8fc59d659db3421fc992e6ed43ebb",
|
||
"70cbd8da12ab2d623ea64a7ff59d6017",
|
||
"38c455db117cd47abe7ec84adcb82703",
|
||
"384e6e5390d91bf026ad92de3e736b67",
|
||
"fbfd4a93aa3e91e758d6a767bfc1e782",
|
||
"b3ec50bc5d0c8bf9938aeb39a215139f",
|
||
"088a4dbae11c802dcbd0b313eeb69068",
|
||
"726cf167d76d14c40ef22c6684614107",
|
||
"90bfa7091b38bc322af3ec08cc455e43",
|
||
"74307878f06f97e56d6a0d70cdc2caaf",
|
||
"ab5a3e7023a00d484c72d371954bfec7",
|
||
"7706336dab51e727bfc8c39f15b9b8c4",
|
||
"4f5956a6334e809492ca242e9a42c716",
|
||
"7272f671003e0192cf8e6402dbb4c92b",
|
||
"ad0af27bbe31f4a95f63d38ce3097a5c",
|
||
"743b0415fb37ed722ebc8fdcd6566b1c",
|
||
"99049f4e27c1075f5c2a8bee2a6078da",
|
||
"204d1e686918408ff168d13ffc06a572",
|
||
"85ca525f01d26e432f9595ba148438f6",
|
||
"11a9e65457a9d0ce86a7d2fcb92f20a0",
|
||
"97e2781c785e228ec1d8dd936aefeb26",
|
||
"a653d6f6cbaf5b250e9e9da81397f2e5",
|
||
"6d1522b0beb17d68ad4230b0158c4652",
|
||
"f9060a24e376900064eb89cc124e0d94",
|
||
"1823e859b25257450139c44c670cf6a9",
|
||
"1edba00a2065fea20698be50c53aa469",
|
||
"108b628730e6b6d95a934dc753ba7800",
|
||
"765df7084717a95d8b661d94470d9874",
|
||
"b6f9d18e20f9fbfcc0f58a8249701c39",
|
||
"6c37a50657fc642ceba428745aa05524",
|
||
"645d96cd1ab254cb2960882c91e59818",
|
||
"e5576c4ae3faf95b4f77ec48032c7bb1",
|
||
"7fea808fa65ee1a8b692d6949e76de62",
|
||
"a697c5cc8c4dcbc81b5349a8299cfd2f",
|
||
"9382ec316f372840b9f07ab68adfd4be",
|
||
"c032c1c45a25ffbb3996d46b978228e7",
|
||
"520e23729ba9420da3d177ccdb7fb1f3",
|
||
"8f5b21d65d86a840a009eead6b8884cc",
|
||
"b1afdd65bac87ffd1c04793a0ab972aa",
|
||
"e40c4f069de5d95683ccdb5c0628b2ef",
|
||
"929dd6c71919f79896296cb65eda4e13",
|
||
"270f05674eec7cf7e210e76f824a75a1",
|
||
"65cde6c7994a153c05dfceb3a75e1444",
|
||
"b970c14d4c6a818744ad4a7bef51bf6b",
|
||
"5b0c274fb2d42d0fe339a856b07940f5",
|
||
"4f7f564dc7f7d80b028471774b527606",
|
||
"40279aac96cb474dd2fa6769c62f5c1c",
|
||
"79cd654eba56807bc9e5c5c5bb6452ad",
|
||
"6a5a16d8dee4c928d741590786fb3df6",
|
||
"6ac1e26c9a4efeacd879fc03608a4381",
|
||
"3064f6f5b04b9d8c45be299963de41dd",
|
||
"8c16736ecc39c3b94b01163bf15a45d0",
|
||
"5b314833ec377a259f4b9c48a1b5c85b",
|
||
"3257d286a8594c664263cda292951244",
|
||
"8c7940010a72f0a48a037fe8391cd2fb",
|
||
"a3da3ef759095cc21e14422e2a14f797",
|
||
"91cbd62d57c8933f3c411118a81ab04d",
|
||
"e7cde366b201c84d3e802718fc6642b2",
|
||
"2d693e4081da35517527806454a563c3",
|
||
"2b91d8ce1cdbc9a44f71c922f5b4207d",
|
||
"f7f6b9e9390bb2744290b4673e111022",
|
||
"472590a92b09bb1250ee5b7b6f209373",
|
||
"0dc76d5e5fddc6768b1a2090a4afe35f",
|
||
"f814e597a8c9a33f65061178cb2d7eb4",
|
||
"c09e67e807d3be0d14695c3060ad7956",
|
||
"aaa6a9021bffee4f930ae91f32774113",
|
||
"bb9072b6b0460a5feb96a6a5dad45875",
|
||
"b5e112417d68ab9bf9bd31655b383318",
|
||
"b40d9e637e3ce07a3b4054ae7b453e8a",
|
||
"725276e227259ff5613b7cba51903662",
|
||
"0624e226b1341db8457aaa3f608370c5",
|
||
"620c162aec244bc3a42e6daf3786cc18",
|
||
"138dc09661f886a51b210af6a551487e",
|
||
"e9a266efc4ec71fddbc4639ac626f23a",
|
||
"59718af97aa91967dde2285c5aa4d736",
|
||
"994fabe27b2d38152d5a1bb6d5e8de39",
|
||
"aa271d610c9fbfda90456e83014a1219",
|
||
"7df2d0d36b5a6445909430c96c54137f",
|
||
"adc50317bed7fc028d3f8606653b692e",
|
||
"ae044a61dbff57608bf4d7796b093246",
|
||
"2bcbf73992b52b6ec3d5ee2f42242710",
|
||
"2532497bca563bd2aa7887616e49cd5b",
|
||
"5d34e01aa0f25ed30278518756f14c5f",
|
||
"6a8223c80f24b9c2056dc23e093d36dd",
|
||
"a524ca620432264e8f3343ef14062dea",
|
||
"9c742c873dce4df4a949930238d3cbde",
|
||
"031d5e6b1ba8b705de216ce2ee738a03",
|
||
"db080178c87a02266d23f07cd72d30b2",
|
||
"6a8b7f6159e4e7b3abbf7cf7c46caa46",
|
||
"513e62c2e1554a9ca393bb12eee5b76f",
|
||
"468b1f4d1faf4a5598e3f4bf356ea1e5",
|
||
"df2f90e09069dd13d87da3ba152123aa",
|
||
"4010caafe71464630760391f1652046b",
|
||
"2d2d3268e83a8caccada4c0cd60a66ad",
|
||
"8a54a27a27bba973b1dbee516de4a9f2",
|
||
"3f132456a2ec89cc2e8b3a49fca1e74a",
|
||
"bb6db2432a7d440fb326e3c7ba0aa023",
|
||
"19342db445a0ba93a98d1c4c351f3e0c",
|
||
"0d8e9aab1b701c0420af4781f391576a",
|
||
"8f009e68251be9ad2603b19f8dec849d",
|
||
"a0d0614e9e0f4cdec2175ce89b094fca",
|
||
"520a4d6fec68a28dbe13accb42a1a8a4",
|
||
"46bdd9a605401074703cd2c101b44337",
|
||
"7f89e8ee473955c9e7606eeb9415181f",
|
||
"79d5a69c0c2fe77163f16ba16d810730",
|
||
"1c0adfdbdcda89c4c0472be4a6b36f0b",
|
||
"f08c5aab42cf9a558b6307410f9a12f8",
|
||
"8dd062f4abbfd07b70cb15b0da28fa18",
|
||
"17cd1e38c99b871a9620ec6e5c975bba",
|
||
"8bea0e5fec7e5ae7240ac623a3fa6edb",
|
||
"dc7ea38698fccd066e69004790ea85c9",
|
||
"d89148dce284949777d4704c68142cc4",
|
||
"f155484e815bf4a2d534ebe5f06a8ed1",
|
||
"899256cc9e3a6ab8a721855b4793bc98",
|
||
"267a605fa69b010603d7a7dbc9ac5a34",
|
||
"b557d839da1e194baf75ed792eb21004",
|
||
"6f4663b4a10be5938e29163078d06141",
|
||
"cc9a2beceab88f135bad825bc50f2d6a",
|
||
"226e26f0f1223b6d96df0a04bef136e9",
|
||
"aa94852f8fb947af1b454b18c61ac4e7",
|
||
"89ba36df96007c7f24173936a64f2093",
|
||
"d361afb95b321792bf485431c6387c7c",
|
||
];
|
||
|
||
function FormatBMSTables(bmsTables) {
|
||
return bmsTables.map((e) => `${e.table}${e.level}`).join(", ");
|
||
}
|
||
|
||
if (require.main === module) {
|
||
(async () => {
|
||
// THE JSON SENT OVER THE WIRE IS INVALID!
|
||
// We have to strip a Byte Order Mark ourselves. Why? No idea.
|
||
// This is illegal JSON. How do people keep messing up such a simple format?
|
||
const text = await fetch(tableInfo.data_url).then((r) => r.text());
|
||
|
||
const data = JSON.parse(text.split(/^\uFEFF/u)[1]);
|
||
|
||
const charts = [];
|
||
const songs = [];
|
||
|
||
const existingMD5s = new Set(ReadCollection("charts-pms.json").map((e) => e.data.hashMD5));
|
||
|
||
let i = 1;
|
||
for (const d of data) {
|
||
if (existingMD5s.has(d.md5)) {
|
||
continue;
|
||
}
|
||
|
||
if (hasRandom.includes(d.md5)) {
|
||
continue;
|
||
}
|
||
|
||
if (!tableInfo.level_order.includes(d.level)) {
|
||
logger.info(`Skipping unknown level ${d.level}`);
|
||
continue;
|
||
}
|
||
|
||
const song = {
|
||
id: i,
|
||
title: d.title,
|
||
artist: d.artist,
|
||
searchTerms: [],
|
||
altTitles: [],
|
||
data: {
|
||
genre: null,
|
||
subtitle: null,
|
||
subartist: null,
|
||
tableString: FormatBMSTables([
|
||
{
|
||
table: tableInfo.symbol,
|
||
level: d.level,
|
||
},
|
||
]),
|
||
},
|
||
};
|
||
|
||
const l = Number(d.level);
|
||
|
||
const tierlistInfo = Number.isNaN(l)
|
||
? {}
|
||
: {
|
||
"sgl-EC": MakeTierlistStuff(l),
|
||
"sgl-HC": MakeTierlistStuff(l),
|
||
};
|
||
|
||
const chart = {
|
||
songID: i,
|
||
chartID: CreateChartID(),
|
||
rgcID: null,
|
||
level: "?",
|
||
levelNum: 0,
|
||
playtype: "Controller",
|
||
difficulty: "CHART",
|
||
isPrimary: true,
|
||
tierlistInfo,
|
||
data: {
|
||
notecount: Number(d.notes),
|
||
hashMD5: d.md5,
|
||
hashSHA256: d.sha256,
|
||
tableFolders: [
|
||
{
|
||
table: tableInfo.symbol,
|
||
level: d.level,
|
||
},
|
||
],
|
||
},
|
||
versions: [],
|
||
};
|
||
|
||
i++;
|
||
|
||
songs.push(song);
|
||
charts.push(chart);
|
||
charts.push(
|
||
Object.assign({}, chart, { chartID: CreateChartID(), playtype: "Keyboard" })
|
||
);
|
||
}
|
||
|
||
MutateCollection("songs-pms.json", () => songs);
|
||
|
||
MutateCollection("charts-pms.json", () => charts);
|
||
})();
|
||
}
|
||
|
||
function MakeTierlistStuff(l) {
|
||
const value = ConvertLevel(l);
|
||
|
||
return {
|
||
value,
|
||
text: value <= 45 ? `○${value.toString()}` : `●${l}`,
|
||
individualDifference: false,
|
||
};
|
||
}
|
||
|
||
function ConvertLevel(i) {
|
||
return {
|
||
1: 46,
|
||
2: 46.5,
|
||
3: 47,
|
||
4: 47.25,
|
||
5: 47.5,
|
||
6: 48,
|
||
7: 48.5,
|
||
8: 49,
|
||
9: 49.25,
|
||
10: 49.5,
|
||
11: 50,
|
||
12: 50.5,
|
||
13: 51,
|
||
14: 51.5,
|
||
15: 52,
|
||
16: 52.5,
|
||
17: 53,
|
||
18: 53.5,
|
||
19: 55,
|
||
20: 55.5,
|
||
}[i];
|
||
}
|