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 e13efd0b07
All checks were successful
Deploy bot / build-and-deploy (push) Successful in 13s
add some checks, more work on price estimating
2025-08-08 02:15:58 +02:00

92 lines
3.2 KiB
JavaScript

const priceTable = [
{
regex: /\b(?:thp|summoner|summ)\b/i,
returnKeyWord: "summoner piece",
prices: ["1000;10", "1100;15", "1200;30", "1250;100", "1300;1000"],
},
];
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 monk 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) => {
const combined = args.join(" ");
console.log(combined);
// regex's are split for readability
const builderRegex =
/\b(?:app|apprentice|thp|summoner|summ|tdmg|tdamage|aura|trange)\b/i;
const dpsRegex = /\b(?:dps|hhp|hdmg)\b/i;
const otherRegex = /\b(?:frost rifle|mm|mischief maker|)\b/i;
let entryFound = false;
let estimatedPrice = 0;
let gameValue = 0;
args.forEach((arg) => {
if (!isNaN(parseInt(arg))) {
gameValue = parseInt(arg);
}
});
console.log(gameValue);
let returnKeyWord = "";
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;
estimatedPrice = findClosestPrice(
constructPriceSubTable(idx),
gameValue
).val;
}
});
if (entryFound) {
message.channel.send(
`Hmm... I estimate your ${gameValue} ${returnKeyWord} to be worth approximately ${
estimatedPrice > 500
? `**${estimatedPrice}** (probably auction)`
: 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.*`
);
} 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."
);
};