This repository has been archived on 2025-08-25. You can view files and clone it, but cannot push or open issues or pull requests.
Files
shiro-calculator/commands/estimate.js
koneko 61b83d6df1
All checks were successful
Deploy bot / build-and-deploy (push) Successful in 13s
upgrades people
2025-08-08 11:37:11 +02:00

152 lines
4.8 KiB
JavaScript

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 = "<<estimate [summary of item you want the price of]";
exports.example =
"<<estimate 1600 ab2 (ab2 dps)\n<<estimate 1100 thp\n<<estimate 2400 app builder staff\n(please use slang(thp,tdmg,etc), do not put the slang first instead always number first\n do not include armor type, conflicting or superflous data to avoid confusion)";
exports.hidden = false;
exports.run = async (client, message, args) => {
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 \`<<help estimate\`
`);
}
const combined = args.join(" ");
console.log(combined);
// regex's are split for readability
const builderRegex = /\b(?:app|apprentice|tdmg|tdamage|aura|trange)\b/i;
const otherRegex = /\b(?:frost rifle|mm|mischief maker|)\b/i;
let entryFound = false;
let estimatedPrice = 0;
let priceDiffFromTable = 0;
let gameValue = 0;
let returnKeyWord = "";
args.forEach((arg) => {
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 `<<help estimate`."
);
}
priceTable.forEach((price, idx) => {
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 `<<help estimate` for more information."
);
};