From f8f89b670b25401b950f98516b3d26230e3671c9 Mon Sep 17 00:00:00 2001 From: "Jill \"oatmealine\" Monoids" Date: Mon, 5 Feb 2024 21:26:05 +0300 Subject: [PATCH] add broken key to nlw endpoint --- README.md | 3 ++- nlw.js | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 65 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index da53723..020b7c8 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,8 @@ Represents an NLW level. - `tier`: `"Fuck"`, `"Beginner"`, `"Easy"`, `"Medium"`, `"Hard"`, `"Very Hard"`, `"Insane"`, `"Extreme"`, `"Remorseless"`, `"Relentless"` or `"Terrifying"`. - `skillset`: Level skillset, as listed on the sheet. -- `enjoyment`: Level enjoyment sampled from EDEL as a string. Can be `"N/A"`, look out! +- `enjoyment`: Level enjoyment sampled from EDEL as a number, or `null`. +- `broken`: If the level is broken in 2.2. `"no"`, `"slightly"`, `"very"`, `"absolutely destroyed"` or rarely `null` if unknown. #### `IDSLevel`: [`Level`](#level) diff --git a/nlw.js b/nlw.js index 89cc5e9..9ca3b35 100644 --- a/nlw.js +++ b/nlw.js @@ -19,14 +19,68 @@ const fruityLevels = { 'gardening map': 'gardening map ', }; +const brokenColors = { + '0,0,0': 'no', + '67,67,67': 'slightly', + '102,102,102': 'very', + '74,134,232': 'no', + '60,120,216': 'slightly', + '17,85,204': 'very', + '0,255,255': 'no', + '69,129,142': 'slightly', + '19,79,92': 'very', + '0,255,0': 'no', + '106,168,79': 'slightly', + '56,118,29': 'very', + '255,255,0': 'no', + '241,194,50': 'slightly', + '191,144,0': 'very', + '255,153,0': 'no', + '230,145,56': 'slightly', + '180,95,6': 'very', + '255,0,0': 'no', + '204,0,0': 'slightly', + '153,0,0': 'very', + '255,0,255': 'no', + '166,77,121': 'slightly', + '116,27,71': 'very', + '153,0,255': 'no', + '103,78,167': 'slightly', + '53,28,117': 'very', + '176,135,235': 'no', + '164,92,246': 'slightly', + '101,78,135': 'very', + '204,204,204': 'no', + '183,183,183': 'slightly', + '153,153,153': 'very', +}; + async function fetchRegularCells(sheet) { console.log('fetching regular cells'); + + // for brokenness + await sheet.loadCells('A:A'); + + let broken = []; + + let rowID = 0; + while (true) { + const cell = sheet.getCell(rowID, 0); + if (!cell || cell == null || cell.value == null) break; + const color = cell.backgroundColor || {}; + const colorString = Math.round((color.red || 0) * 255) + ',' + Math.round((color.green || 0) * 255) + ',' + Math.round((color.blue || 0) * 255); + let broke = brokenColors[colorString]; + broken.push(broke || null); + rowID++; + } + + const levels = await sheet.getCellsInRange('A:A'); const creators = await sheet.getCellsInRange('B:B'); const skillsets = await sheet.getCellsInRange('D:D'); const enjoyments = await sheet.getCellsInRange('E:E'); const descriptions = await sheet.getCellsInRange('F:F'); - return { levels, creators, skillsets, enjoyments, descriptions }; + return { levels, broken, creators, skillsets, enjoyments, descriptions }; } async function fetchPlatformerCells(sheet) { console.log('fetching platformer cells'); @@ -35,7 +89,7 @@ async function fetchPlatformerCells(sheet) { const skillsets = await sheet.getCellsInRange('D:D'); const enjoyments = await sheet.getCellsInRange('E:E'); const descriptions = await sheet.getCellsInRange('F:F'); - return { levels, creators, skillsets, enjoyments, descriptions }; + return { levels, broken: Array(levels.length).fill('take a guess'), creators, skillsets, enjoyments, descriptions }; } async function fetchPendingCells(sheet) { console.log('fetching pending cells'); @@ -44,11 +98,11 @@ async function fetchPendingCells(sheet) { const skillsets = await sheet.getCellsInRange('E:E'); const enjoyments = []; const descriptions = await sheet.getCellsInRange('F:F'); - return { levels, creators, skillsets, enjoyments, descriptions }; + return { levels, broken: Array(levels.length).fill(null), creators, skillsets, enjoyments, descriptions }; } async function fetchLevels(sheet, platformer, pending) { - const { levels, creators, skillsets, enjoyments, descriptions } = await ( + const { levels, broken, creators, skillsets, enjoyments, descriptions } = await ( pending ? fetchPendingCells(sheet) : (platformer ? fetchPlatformerCells(sheet) : fetchRegularCells(sheet)) ); @@ -57,6 +111,7 @@ async function fetchLevels(sheet, platformer, pending) { let lastTier = null; for (let i in levels) { const level = levels[i], creator = creators[i], skillset = skillsets[i], enjoyment = enjoyments[i], description = descriptions[i]; + let broke = broken[i]; if (level.length === 0 || level[0] === '') break; @@ -71,6 +126,9 @@ async function fetchLevels(sheet, platformer, pending) { const enjoymentStr = enjoyment && enjoyment[0]; const enjoymentParse = parseFloat(enjoymentStr || ""); + const name = fruityLevels[level[0]] || level[0] || ""; + if (name === 'miss you') broke = 'absolutely destroyed'; + const obj = { sheetIndex: parseInt(i), tier: lastTier, @@ -79,6 +137,7 @@ async function fetchLevels(sheet, platformer, pending) { skillset: (skillset && skillset[0] || "").trim(), enjoyment: !isNaN(enjoymentParse) ? enjoymentParse : null, description: (description && description[0] || "").trim(), + broken: broke, }; levelObjs.push(obj);