92 lines
3.2 KiB
JavaScript
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."
|
|
);
|
|
};
|