Made auction command copyable in a single click
This commit is contained in:
parent
153f60c72c
commit
e829289e6b
1 changed files with 66 additions and 74 deletions
140
index.js
140
index.js
|
@ -1,32 +1,32 @@
|
|||
const {default: axios} = require("axios")
|
||||
const config = require("./config.json")
|
||||
const discord = require('discord.js')
|
||||
const {Worker} = require("worker_threads")
|
||||
const { asyncInterval, addNotation } = require("./src/helperFunctions")
|
||||
let threadsToUse = config.data["threadsToUse/speed"] ?? 1
|
||||
let lastUpdated = 0
|
||||
let doneWorkers = 0
|
||||
let startingTime
|
||||
let maxPrice = 0
|
||||
let itemDatas = {}
|
||||
const workers = []
|
||||
const webhookRegex = /https:\/\/discord.com\/api\/webhooks\/(.+)\/(.+)/
|
||||
const { default: axios } = require("axios");
|
||||
const config = require("./config.json");
|
||||
const { WebhookClient, MessageEmbed } = require('discord.js');
|
||||
const { Worker } = require("worker_threads");
|
||||
const { asyncInterval, addNotation } = require("./src/helperFunctions");
|
||||
|
||||
let threadsToUse = config.data["threadsToUse/speed"] ?? 1;
|
||||
let lastUpdated = 0;
|
||||
let doneWorkers = 0;
|
||||
let startingTime;
|
||||
let maxPrice = 0;
|
||||
let itemDatas = {};
|
||||
const workers = [];
|
||||
const webhookRegex = /https:\/\/discord.com\/api\/webhooks\/(.+)\/(.+)/;
|
||||
|
||||
const bazaarPrice = {
|
||||
"RECOMBOBULATOR_3000": 0,
|
||||
"HOT_POTATO_BOOK": 0,
|
||||
"FUMING_POTATO_BOOK": 0
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
async function initialize() {
|
||||
matches = config.webhook.discordWebhookUrl.match(webhookRegex)
|
||||
if (!matches) return console.log(`[Main thread] Couldn't parse Webhook URL`)
|
||||
const webhook = new discord.WebhookClient(matches[1], matches[2]);
|
||||
const matches = config.webhook.discordWebhookUrl.match(webhookRegex);
|
||||
if (!matches) return console.log(`[Main thread] Couldn't parse Webhook URL`);
|
||||
const webhook = new WebhookClient({ id: matches[1], token: matches[2] });
|
||||
|
||||
await getBzData()
|
||||
await getMoulberry()
|
||||
await getLBINs()
|
||||
await getBzData();
|
||||
await getMoulberry();
|
||||
await getLBINs();
|
||||
|
||||
for (let j = 0; j < threadsToUse; j++) {
|
||||
workers[j] = new Worker('./AuctionHandler.js', {
|
||||
|
@ -36,89 +36,85 @@ async function initialize() {
|
|||
workerNumber: j,
|
||||
maxPrice: maxPrice
|
||||
}
|
||||
})
|
||||
|
||||
});
|
||||
|
||||
workers[j].on("message", async (result) => {
|
||||
if (result.itemData !== undefined) {
|
||||
let averagePrice = itemDatas[result.itemData.id]?.cleanPrice || "N/A";
|
||||
if (result.auctionData.lbin - result.auctionData.price >= config.data.minSnipeProfit && averagePrice - result.auctionData.price >= minAvgProfit) {
|
||||
if (result.auctionData.lbin - result.auctionData.price >= config.data.minSnipeProfit && averagePrice - result.auctionData.price >= config.data.minAvgProfit) {
|
||||
let mustBuyMessage = '';
|
||||
const embed = new MessageEmbed()
|
||||
.setTitle(`**${(result.itemData.name).replace(/§./g, '')}**`)
|
||||
.setColor("#2e3137")
|
||||
.setThumbnail(`https://sky.shiiyu.moe/item/${result.itemData.id}`)
|
||||
.setDescription(`${mustBuyMessage}\nAuction: \`\`\`/viewauction ${result.auctionData.auctionID}\`\`\`\nProfit: \`${addNotation("oneLetters", (result.auctionData.profit))} (${result.auctionData.percentProfit}%)\`\nCost: \`${addNotation("oneLetters", (result.auctionData.price))}\`\nLBIN: \`${addNotation("oneLetters", (result.auctionData.lbin))}\`\nSales/Day: \`${addNotation("oneLetters", result.auctionData.sales)}\`\nType: \`${result.auctionData.ahType}\`\nAverage Price: \`${addNotation("oneLetters", averagePrice)}\``);
|
||||
|
||||
await webhook.send({
|
||||
username: config.webhook.webhookName,
|
||||
avatarURL: config.webhook.webhookPFP,
|
||||
embeds: [new discord.MessageEmbed()
|
||||
.setTitle(`**${(result.itemData.name).replaceAll(/§./g, '')}**`)
|
||||
.setColor("#2e3137")
|
||||
.setThumbnail(`https://sky.shiiyu.moe/item/${result.itemData.id}`)
|
||||
.setDescription(`${mustBuyMessage}\nAuction: \`/viewauction ${result.auctionData.auctionID}\`\nProfit: \`${addNotation("oneLetters", (result.auctionData.profit))} (${result.auctionData.percentProfit}%)\`\nCost: \`${addNotation("oneLetters", (result.auctionData.price))}\`\nLBIN: \`${addNotation("oneLetters", (result.auctionData.lbin))}\`\nSales/Day: \`${addNotation("oneLetters", result.auctionData.sales)}\`\nType: \`${result.auctionData.ahType}\`\nAverage Price: \`${addNotation("oneLetters", averagePrice)}\``)
|
||||
]
|
||||
})
|
||||
|
||||
embeds: [embed]
|
||||
});
|
||||
}
|
||||
} else if (result === "finished") {
|
||||
doneWorkers++
|
||||
doneWorkers++;
|
||||
if (doneWorkers === threadsToUse) {
|
||||
doneWorkers = 0
|
||||
console.log(`Completed in ${(Date.now() - startingTime) / 1000} seconds`)
|
||||
startingTime = 0
|
||||
workers[0].emit("done")
|
||||
doneWorkers = 0;
|
||||
console.log(`Completed in ${(Date.now() - startingTime) / 1000} seconds`);
|
||||
startingTime = 0;
|
||||
workers[0].emit("done");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
asyncInterval(async () => {
|
||||
await getLBINs()
|
||||
await getLBINs();
|
||||
workers.forEach((worker) => {
|
||||
worker.postMessage({type: "moulberry", data: itemDatas})
|
||||
})
|
||||
}, "lbin", 60000)
|
||||
worker.postMessage({ type: "moulberry", data: itemDatas });
|
||||
});
|
||||
}, "lbin", 60000);
|
||||
|
||||
asyncInterval(async () => {
|
||||
await getMoulberry()
|
||||
await getMoulberry();
|
||||
workers.forEach((worker) => {
|
||||
worker.postMessage({type: "moulberry", data: itemDatas})
|
||||
})
|
||||
}, "avg", 60e5)
|
||||
|
||||
worker.postMessage({ type: "moulberry", data: itemDatas });
|
||||
});
|
||||
}, "avg", 60e5);
|
||||
|
||||
asyncInterval(async () => {
|
||||
return new Promise(async (resolve) => {
|
||||
const ahFirstPage = await axios.get("https://api.hypixel.net/skyblock/auctions?page=0")
|
||||
const totalPages = ahFirstPage.data.totalPages
|
||||
const ahFirstPage = await axios.get("https://api.hypixel.net/skyblock/auctions?page=0");
|
||||
const totalPages = ahFirstPage.data.totalPages;
|
||||
if (ahFirstPage.data.lastUpdated === lastUpdated) {
|
||||
resolve()
|
||||
resolve();
|
||||
} else {
|
||||
lastUpdated = ahFirstPage.data.lastUpdated
|
||||
startingTime = Date.now()
|
||||
console.log("Getting auctions..")
|
||||
lastUpdated = ahFirstPage.data.lastUpdated;
|
||||
startingTime = Date.now();
|
||||
console.log("Getting auctions..");
|
||||
workers.forEach((worker) => {
|
||||
worker.postMessage({type: "pageCount", data: totalPages})
|
||||
})
|
||||
worker.postMessage({ type: "pageCount", data: totalPages });
|
||||
});
|
||||
workers[0].once("done", () => {
|
||||
resolve()
|
||||
})
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
})
|
||||
}, "check", 0)
|
||||
});
|
||||
}, "check", 0);
|
||||
}
|
||||
|
||||
async function getLBINs() {
|
||||
const lbins = await axios.get("https://moulberry.codes/lowestbin.json")
|
||||
const lbinData = lbins.data
|
||||
const lbins = await axios.get("https://moulberry.codes/lowestbin.json");
|
||||
const lbinData = lbins.data;
|
||||
for (const item of Object.keys(lbinData)) {
|
||||
if (!itemDatas[item]) itemDatas[item] = {}
|
||||
itemDatas[item].lbin = lbinData[item]
|
||||
if (!itemDatas[item]) itemDatas[item] = {};
|
||||
itemDatas[item].lbin = lbinData[item];
|
||||
}
|
||||
}
|
||||
|
||||
async function getMoulberry() {
|
||||
// Fetch the original data for sales and clean price information
|
||||
const moulberryAvgs = await axios.get("https://moulberry.codes/auction_averages/3day.json");
|
||||
const avgData = moulberryAvgs.data;
|
||||
|
||||
// Fetch the new clean price data
|
||||
const cleanPriceAvgs = await axios.get("https://moulberry.codes/auction_averages_lbin/1day.json");
|
||||
const cleanPriceData = cleanPriceAvgs.data;
|
||||
|
||||
|
@ -126,20 +122,16 @@ async function getMoulberry() {
|
|||
if (!itemDatas[item]) itemDatas[item] = {};
|
||||
const itemInfo = avgData[item];
|
||||
|
||||
// Set sales data
|
||||
itemDatas[item].sales = itemInfo.sales !== undefined ? itemInfo.sales : 0;
|
||||
|
||||
// Set clean price data from the new endpoint if available, otherwise use the old data
|
||||
itemDatas[item].cleanPrice = cleanPriceData[item] !== undefined ? Math.round(cleanPriceData[item]) : (itemInfo.clean_price !== undefined ? itemInfo.clean_price : itemInfo.price);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async function getBzData() {
|
||||
const bzData = await axios.get("https://api.hypixel.net/skyblock/bazaar")
|
||||
bazaarPrice["RECOMBOBULATOR_3000"] = bzData.data.products.RECOMBOBULATOR_3000.quick_status.buyPrice
|
||||
bazaarPrice["HOT_POTATO_BOOK"] = bzData.data.products.HOT_POTATO_BOOK.quick_status.buyPrice
|
||||
bazaarPrice["FUMING_POTATO_BOOK"] = bzData.data.products.FUMING_POTATO_BOOK.quick_status.buyPrice
|
||||
const bzData = await axios.get("https://api.hypixel.net/skyblock/bazaar");
|
||||
bazaarPrice["RECOMBOBULATOR_3000"] = bzData.data.products.RECOMBOBULATOR_3000.quick_status.buyPrice;
|
||||
bazaarPrice["HOT_POTATO_BOOK"] = bzData.data.products.HOT_POTATO_BOOK.quick_status.buyPrice;
|
||||
bazaarPrice["FUMING_POTATO_BOOK"] = bzData.data.products.FUMING_POTATO_BOOK.quick_status.buyPrice;
|
||||
}
|
||||
|
||||
initialize()
|
||||
initialize();
|
||||
|
|
Loading…
Reference in a new issue