add broken key to nlw endpoint

This commit is contained in:
Jill 2024-02-05 21:26:05 +03:00
parent dc83dcb903
commit f8f89b670b
Signed by: oat
GPG Key ID: 33489AA58A955108
2 changed files with 65 additions and 5 deletions

View File

@ -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)

67
nlw.js
View File

@ -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);