const priceTable = [ { regex: /\b(?:thp|summoner|summ)\b/i, returnKeyWord: "summoner piece", prices: [ "1000;10", "1050;12", "1100;15", "1150;25", "1200;30", "1250;100", "1300;500", ], }, { regex: /\b(?:dps|ab2)\b/i, returnKeyWord: "dps/ab2 piece", prices: [ "1400;20", "1450;35", "1500;50", "1550;75", "1600;150", "1650;500", "1700;1000", "1750;2000", "1800;50000", ], }, { regex: /\b(?:tb|ab1)\b/i, returnKeyWord: "tb/ab1 piece", prices: ["980;5", "1050;15", "1100;40", "1150;70", "1200;500"], }, { regex: /\b(?:app builder staff|apprentice build staff|app staff|apprentice staff)\b/i, returnKeyWord: "apprentice staff", prices: [ "2200;5", "2250;15", "2300;25", "2350;35", "2400;45", "2450;70", "2500;100", "2550;175", "2600;250", "2700;400", "2800;500", "2900;2000", ], }, { regex: /\b(?:aura|trange)\b/i, returnKeyWord: "aura/trange piece", prices: ["980;5", "1050;15", "1100;40", "1150;70", "1200;500"], }, ]; function constructPriceSubTable(idx) { const orig = priceTable[idx]; const priceSubTable = []; orig.prices.forEach((price) => { const splitPrice = price.split(";"); const obj = { number: parseInt(splitPrice[0]), val: parseInt(splitPrice[1]), }; priceSubTable.push(obj); }); return priceSubTable; } function findClosestPrice(subtable, gameValue) { let closest = subtable[0]; let smallestDiff = Math.abs(subtable[0].number - gameValue); for (let i = 1; i < subtable.length; i++) { const diff = Math.abs(subtable[i].number - gameValue); if (diff < smallestDiff) { smallestDiff = diff; closest = subtable[i]; } } return { val: closest.val, diff: smallestDiff }; } exports.name = "estimate"; exports.description = ":money_with_wings: Give an estimated price of certain items in cv. [WIP]"; exports.usage = "< { if (!args[0]) { let tbl = ""; priceTable.forEach((p) => { tbl += p.returnKeyWord + "\n"; }); return message.channel .send(`Available items in pricing table:\n\`\`\`\n${tbl}\`\`\`\nFor usage, consult \`< { if (!isNaN(parseInt(arg)) && !gameValue) { gameValue = parseInt(arg); } }); if (!gameValue) { return message.channel.send( "You didn't include any numbers in your query. Try again or consult `< { if (price.regex.test(combined)) { entryFound = true; returnKeyWord = price.returnKeyWord; let closestInTable = findClosestPrice( constructPriceSubTable(idx), gameValue ); estimatedPrice = closestInTable.val; priceDiffFromTable = closestInTable.diff; } }); if (entryFound) { message.channel.send( `Hmm... I estimate your **${gameValue} ${returnKeyWord}** to be worth approximately ${ estimatedPrice > 499 ? `**__${estimatedPrice}__** (auction it!)` : `**${estimatedPrice}**` } cv.\n*Take this info with a grain of salt though. Estimation is provided through looking at past trades/price checks/sheets in DDRNG. GLHF.*\n*Calc diff: ${priceDiffFromTable}*.` ); } else message.channel.send( "Your summary didn't match any entry in price table (WIP, im workig on it), please refine your query and/or reffer to `<