148 lines
5.4 KiB
JavaScript
148 lines
5.4 KiB
JavaScript
import { GoogleSpreadsheet } from 'google-spreadsheet';
|
|
import { persistently } from './persistance.js';
|
|
|
|
const IDS_ID = '15ehtAIpCR8s04qIb8zij9sTpUdGJbmAE_LDcfVA3tcU';
|
|
const IDS_REGULAR_LEVELS_ID = 1309758655;
|
|
const IDS_PLATFORMER_LEVELS_ID = 506524049;
|
|
|
|
const fruityLevels = {
|
|
'The Place': 'The Place',
|
|
'\'10': '10',
|
|
'(m)ORBJECT': 'ORBJECT',
|
|
'Dark matter (Real)': 'Dark matter',
|
|
'Versus... MR. BEAST!!!': 'Vers', // ???
|
|
'El Dorado': 'El Dorado ', // ????
|
|
'Photovoltaic ': 'Photovoltaic',
|
|
'Disconnect ': 'Disconnect',
|
|
};
|
|
|
|
// horrid. thank you ids
|
|
const colors = {
|
|
'0,0,0': { tier: 'Fuck', broken: 'no' },
|
|
'74,134,232': { tier: 'Beginner', broken: 'no' },
|
|
'28,69,135': { tier: 'Beginner', broken: 'yes' },
|
|
'7,55,99': { tier: 'Beginner', broken: 'yes' }, // ????????
|
|
'0,255,255': { tier: 'Easy', broken: 'no' },
|
|
'0,171,171': { tier: 'Easy', broken: 'yes' },
|
|
'0,255,0': { tier: 'Medium', broken: 'no' },
|
|
'0,154,0': { tier: 'Medium', broken: 'yes' },
|
|
'255,255,0': { tier: 'Hard', broken: 'no' },
|
|
'191,144,0': { tier: 'Hard', broken: 'yes' },
|
|
// there's also a few 0,0,0s in very hard because i guess the IDS sheet editor like causing pain onto people like me
|
|
'255,153,0': { tier: 'Very Hard', broken: 'no' },
|
|
'180,95,6': { tier: 'Very Hard', broken: 'yes' },
|
|
'255,0,0': { tier: 'Insane', broken: 'no' },
|
|
'153,0,0': { tier: 'Insane', broken: 'yes' },
|
|
'255,0,255': { tier: 'Extreme', broken: 'no' },
|
|
'161,0,161': { tier: 'Extreme', broken: 'yes' },
|
|
'153,0,255': { tier: 'Extreme', broken: 'no' }, // ????
|
|
}
|
|
|
|
async function fetchRegularCells(sheet) {
|
|
console.log('fetching regular cells');
|
|
// we need this for formatting :)
|
|
await persistently(async () => await sheet.loadCells('A:B'));
|
|
|
|
let levels = [];
|
|
let tiers = [];
|
|
let broken = [];
|
|
|
|
let rowID = 1;
|
|
let previousTier = 'penis tier :33';
|
|
while (true) {
|
|
if (rowID >= sheet.rowCount) break;
|
|
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 tier = colors[colorString];
|
|
if (!tier) tier = { tier: previousTier };
|
|
if (rowID > 50 && tier.tier === 'Fuck') tier = { tier: previousTier, broken: 'no' };
|
|
levels.push(cell.value.toString())
|
|
tiers.push(tier.tier);
|
|
broken.push(tier.broken || null);
|
|
previousTier = tier.tier;
|
|
rowID++;
|
|
}
|
|
|
|
const creators = await persistently(async () => await sheet.getCellsInRange('C2:C'));
|
|
const skillsets = await persistently(async () => await sheet.getCellsInRange('E2:E'));
|
|
const descriptions = await persistently(async () => await sheet.getCellsInRange('F2:F'));
|
|
|
|
return { levels, tiers, broken, creators, skillsets, descriptions };
|
|
}
|
|
|
|
async function fetchPlatformerCells(sheet) {
|
|
console.log('fetching platformer cells');
|
|
// we need this for formatting :)
|
|
await persistently(async () => await sheet.loadCells('A:B'));
|
|
|
|
let levels = [];
|
|
let tiers = [];
|
|
let broken = [];
|
|
|
|
let rowID = 1;
|
|
let previousTier = 'penis tier :33';
|
|
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 tier = colors[colorString];
|
|
if (!tier) tier = { tier: previousTier };
|
|
if (rowID > 50 && tier.tier === 'Fuck') tier = { tier: previousTier, broken: 'no' };
|
|
levels.push(cell.value.toString())
|
|
tiers.push(tier.tier);
|
|
broken.push(tier.broken || null);
|
|
previousTier = tier.tier;
|
|
rowID++;
|
|
}
|
|
|
|
const creators = await persistently(async () => await sheet.getCellsInRange('C2:C'));
|
|
const skillsets = await persistently(async () => await sheet.getCellsInRange('E2:E'));
|
|
const descriptions = await persistently(async () => await sheet.getCellsInRange('F2:F'));
|
|
|
|
return { levels, tiers, broken, creators, skillsets, descriptions };
|
|
}
|
|
|
|
async function fetchLevels(sheet, platformer) {
|
|
const { levels, tiers, broken, creators, skillsets, descriptions } = await (platformer ? fetchPlatformerCells(sheet) : fetchRegularCells(sheet));
|
|
|
|
let levelObjs = [];
|
|
|
|
for (let i in levels) {
|
|
const level = levels[i], tier = tiers[i], broke = broken[i], creator = creators[i], skillset = skillsets[i], description = descriptions[i];
|
|
|
|
const obj = {
|
|
sheetIndex: parseInt(i) + 1,
|
|
tier: tier,
|
|
name: fruityLevels[level] || level || "",
|
|
creator: (creator && creator[0] || "").trim(),
|
|
skillset: (skillset && skillset[0] || "").trim(),
|
|
description: (description && description[0] || "").trim(),
|
|
broken: broke,
|
|
};
|
|
|
|
levelObjs.push(obj);
|
|
}
|
|
|
|
return levelObjs;
|
|
}
|
|
|
|
let doc;
|
|
|
|
export async function loadSpreadsheet() {
|
|
doc = new GoogleSpreadsheet(IDS_ID, { apiKey: process.env.API_KEY });
|
|
await persistently(async () => await doc.loadInfo()); // loads document properties and worksheets
|
|
console.log('loaded IDS spreadsheet');
|
|
}
|
|
|
|
export async function fetchAllLevels() {
|
|
if (!doc) await loadSpreadsheet();
|
|
|
|
console.log('fetching IDS levels');
|
|
return {
|
|
regular: await fetchLevels(doc.sheetsById[IDS_REGULAR_LEVELS_ID], false),
|
|
platformer: await fetchLevels(doc.sheetsById[IDS_PLATFORMER_LEVELS_ID], true),
|
|
};
|
|
} |