diff options
| author | Pinapelz <yukais@pinapelz.com> | 2025-12-21 01:26:05 -0800 |
|---|---|---|
| committer | Pinapelz <yukais@pinapelz.com> | 2025-12-21 01:26:05 -0800 |
| commit | cbacc1cd7924c558c27c89ab0b6723dc73d0db08 (patch) | |
| tree | 1daea8aee6e5f221c457459abb5f8e6f365635d3 /chuni/tachi | |
| parent | 579056de198595979ae2cf692a32d0456353764f (diff) | |
remove old tachi_to_tachi userscripts (use universal)
Diffstat (limited to 'chuni/tachi')
| -rw-r--r-- | chuni/tachi/README.md | 24 | ||||
| -rw-r--r-- | chuni/tachi/tachi_to_tachi_pb.js | 127 | ||||
| -rw-r--r-- | chuni/tachi/tachi_to_tachi_session.js | 111 |
3 files changed, 0 insertions, 262 deletions
diff --git a/chuni/tachi/README.md b/chuni/tachi/README.md deleted file mode 100644 index c11178b..0000000 --- a/chuni/tachi/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# Not Maintained. Use the universal script for sessions - -# CHUNITHM Tachi to Tachi - -This is a bookmarklet that will allow you to download data shown in the Web UI of Tachi into a `Batch-Manual` compatible form again. - -This can be handy if you want to download/save data from the MYT network if you are already in a Tachi instance that has integrations with it. - -# Scripts - -## `tachi_to_tachi_pb.js` -Takes data from your profile page which only shows your PB for each song -Page: `https://my-tachi-instance.com/u/USERNAME/games/chunithm/Single/scores` - -## `tachi_to_tachi_session.js` -For a singular session. Choose the session to export and go to the `All Scores` tab -Page: `https://my-tachi-instance.com/u/USERNAME/games/chunithm/Single/sessions/SESSION_ID` - -# Usage - -1. Copy the contents of the script you want to use -2. Create a new bookmark and paste the full contents of the script into the URL section -3. Navigate to the relevant score page as shown in the previous section -4. Show as many scores as possible on a singular view, if you exceed the largest limit then repeat the steps above for the next page(s) diff --git a/chuni/tachi/tachi_to_tachi_pb.js b/chuni/tachi/tachi_to_tachi_pb.js deleted file mode 100644 index 43355ee..0000000 --- a/chuni/tachi/tachi_to_tachi_pb.js +++ /dev/null @@ -1,127 +0,0 @@ -javascript:void(function () { - function parseChunithmTable() { - const rows = document.querySelectorAll("table.table tbody tr"); - const difficultyMap = { - E: "Expert", - A: "Advanced", - B: "Basic", - M: "Master" - }; - const results = { - meta: { - game: "chunithm", - playtype: "Single", - service: "Tachi to Tachi PB Export", - }, - scores: [] - }; - - for (let i = 0; i < rows.length; i += 3) { - const row = rows[i]; - if (!row) continue; - - const cells = row.querySelectorAll("td"); - if (cells.length < 11) continue; - - let difficulty = cells[1].innerText.trim().replace(/\n/, " ").split(" ")[0]; - if (difficulty.length === 1) { - difficulty = difficultyMap[difficulty] || difficulty; - } - - const songAnchor = cells[3].querySelector("a"); - const title = songAnchor?.childNodes[0]?.textContent.trim() || ""; - const artist = songAnchor?.querySelector("small")?.textContent.trim() || ""; - - const scoreRank = cells[5].querySelector("strong")?.innerText.trim() || ""; - const scoreValue = parseInt( - cells[5].innerText.replace(scoreRank, "").trim().replace(/,/g, "") - ); - - const judgementText = cells[6].innerText.trim(); - const parts = judgementText.split("-").map((x) => parseInt(x.trim())); - const [jcrit, justice, attack, miss] = parts; - - const fastSlowMatch = judgementText.match(/\(F:(\d+)\s+S:(\d+)\)/); - const fast = fastSlowMatch ? parseInt(fastSlowMatch[1]) : undefined; - const slow = fastSlowMatch ? parseInt(fastSlowMatch[2]) : undefined; - - const lamp = cells[7].innerText.trim(); - let clearLamp = "FAILED"; - let noteLamp = "NONE"; - - if (lamp.includes("FULL COMBO")) { - noteLamp = "FULL COMBO"; - clearLamp = "CLEAR"; - } - if (lamp.includes("CLEAR")) { - clearLamp = "CLEAR"; - } - if (lamp.includes("ALL JUSTICE")) { - noteLamp = "ALL JUSTICE"; - clearLamp = "CLEAR"; - } - if (lamp.includes("ALL JUSTICE CRITICAL")) { - noteLamp = "ALL JUSTICE CRITICAL"; - clearLamp = "CLEAR"; - } - if (lamp.includes("HARD")) { - clearLamp = "HARD"; - } - if (lamp.includes("BRAVE")) { - clearLamp = "BRAVE"; - } - if (lamp.includes("ABSOLUTE")) { - clearLamp = "ABSOLUTE"; - } - if (lamp.includes("CATASTROPHY")) { - clearLamp = "CATASTROPHY"; - } - const rating = parseFloat(cells[8].innerText.trim()); - - const timestampText = cells[10].innerText.trim().split("\n"); - const timestampString = timestampText[1]?.trim() || ""; - const timeAchieved = timestampString ? new Date(timestampString).getTime() : 0; - - const score = { - score: scoreValue, - clearLamp, - noteLamp, - matchType: "songTitle", - difficulty, - identifier: title, - artist, - judgements: { - jcrit, - justice, - attack, - miss, - }, - timeAchieved - }; - - if (fast !== undefined && slow !== undefined) { - score.judgements.fast = fast; - score.judgements.slow = slow; - } - - results.scores.push(score); - } - - return results; - } - - function downloadJSON(data) { - const blob = new Blob([JSON.stringify(data, null, 2)], { - type: "application/json", - }); - const url = URL.createObjectURL(blob); - const a = document.createElement("a"); - a.href = url; - a.download = "chunithm_table.json"; - a.click(); - URL.revokeObjectURL(url); - } - - const data = parseChunithmTable(); - downloadJSON(data); -})(); diff --git a/chuni/tachi/tachi_to_tachi_session.js b/chuni/tachi/tachi_to_tachi_session.js deleted file mode 100644 index e360e8a..0000000 --- a/chuni/tachi/tachi_to_tachi_session.js +++ /dev/null @@ -1,111 +0,0 @@ -javascript: void (function () { - function parseChunithmTable() { - const rows = document.querySelectorAll("table.table tbody tr"); - const results = { - meta: { - game: "chunithm", - playtype: "Single", - service: "Tachi to Tachi Export", - }, - scores: [], - }; - for (let i = 0; i < rows.length; i++) { - const row = rows[i]; - const cells = row.querySelectorAll("td"); - if ( - cells.length < 9 || - row.classList.contains("expandable-pseudo-row") || - row.classList.contains("fake-row") - ) - continue; - let difficultyCell = cells[0]; - let difficultyText = difficultyCell.innerText.trim(); - let difficultyMatch = difficultyText.match( - /(MASTER|EXPERT|ADVANCED|BASIC|M|E|A|B)/i, - ); - let difficulty = difficultyMatch - ? difficultyMatch[0].toUpperCase() - : "UNKNOWN"; - const difficultyMap = { - M: "Master", - E: "Expert", - A: "Advanced", - B: "Basic", - }; - if (difficulty.length === 1) - difficulty = difficultyMap[difficulty] || difficulty; - const songAnchor = cells[2].querySelector("a"); - const title = songAnchor?.childNodes[0]?.textContent.trim() || ""; - const artist = - songAnchor?.querySelector("small")?.textContent.trim() || ""; - const scoreRank = - cells[3].querySelector("strong")?.innerText.trim() || ""; - const scoreValue = parseInt( - cells[3].innerText.replace(scoreRank, "").trim().replace(/,/g, ""), - ); - const judgementText = cells[4].innerText.trim(); - const parts = judgementText.split("-").map((x) => parseInt(x.trim())); - const [jcrit, justice, attack, miss] = parts; - const lamp = cells[5].innerText.trim(); - let clearLamp = "FAILED"; - let noteLamp = "NONE"; - - if (lamp.includes("FULL COMBO")) { - noteLamp = "FULL COMBO"; - clearLamp = "CLEAR"; - } - if (lamp.includes("CLEAR")) { - clearLamp = "CLEAR"; - } - if (lamp.includes("ALL JUSTICE")) { - noteLamp = "ALL JUSTICE"; - clearLamp = "CLEAR"; - } - if (lamp.includes("ALL JUSTICE CRITICAL")) { - noteLamp = "ALL JUSTICE CRITICAL"; - clearLamp = "CLEAR"; - } - if (lamp.includes("HARD")) { - clearLamp = "HARD"; - } - if (lamp.includes("BRAVE")) { - clearLamp = "BRAVE"; - } - if (lamp.includes("ABSOLUTE")) { - clearLamp = "ABSOLUTE"; - } - if (lamp.includes("CATASTROPHY")) { - clearLamp = "CATASTROPHY"; - } - const timestampCellLines = cells[7].innerText.trim().split("\n"); - const dateString = - timestampCellLines.find((line) => /\w+ \d+, \d+/.test(line)) || ""; - const timeAchieved = dateString ? new Date(dateString).getTime() : 0; - results.scores.push({ - score: scoreValue, - clearLamp, - noteLamp, - matchType: "songTitle", - difficulty, - identifier: title, - artist, - judgements: { jcrit, justice, attack, miss }, - timeAchieved, - }); - } - return results; - } - function downloadJSON(data) { - const blob = new Blob([JSON.stringify(data, null, 2)], { - type: "application/json", - }); - const url = URL.createObjectURL(blob); - const a = document.createElement("a"); - a.href = url; - a.download = "chunithm_table.json"; - a.click(); - URL.revokeObjectURL(url); - } - const data = parseChunithmTable(); - downloadJSON(data); -})(); |
