diff --git a/tasks/example2.js b/tasks/example2.js deleted file mode 100644 index 402a43a..0000000 --- a/tasks/example2.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = (client, config, state) => { - //console.log(`example log ${client.user.tag}`); -}; \ No newline at end of file diff --git a/tasks/unpaidOC.js b/tasks/unpaidOC.js new file mode 100644 index 0000000..fb64eed --- /dev/null +++ b/tasks/unpaidOC.js @@ -0,0 +1,61 @@ +module.exports = async (client, torn, config, state) => { + const { EmbedBuilder } = require('discord.js'); + const fs = require('fs'); + const channel = client.channels.resolve(config.channels.ocAlert); + const now = new Date(); + state = require('../state.json'); + let embeds = []; + const data = await torn.api(`https://api.torn.com/v2/faction/crimes?cat=successful&from=${now.getTime() / 1000 - 7 * 24 * 60 * 60}&sort=DESC`); + for (const crime of data.crimes) { + if (!crime.rewards.payout) { + const execDate = new Date(crime.executed_at * 1000); + const embed = new EmbedBuilder() + .setTitle(crime.name) + .setDescription(`Completed \nCash earned: $${crime.rewards.money}`) + .setURL(`https://www.torn.com/factions.php?step=your&type=7#/tab=crimes&crimeId=${crime.id}`); + if (crime.rewards.money === 0) { + const itemPromises = crime.rewards.items.map(item => + torn.item(item.id).then(itemData => ({ + quantity: item.quantity, + name: itemData.items[0].name, + value: itemData.items[0].value.market_price + })) + ); + const resolvedItems = await Promise.all(itemPromises); + let items = `Completed \nItems earned: \n`; + resolvedItems.forEach(item => { + console.log(item); + items += `${item.quantity}x ${item.name} ($${item.value.toLocaleString()})\n`; + }); + embed.setDescription(items); + } + const profilePromises = crime.slots.map(slot => + torn.user.profile(slot.user.id).then(profile => ({ + name: profile.name, + value: `Pass rate: ${slot.checkpoint_pass_rate}`, + inline: true + })) + ); + const fields = await Promise.all(profilePromises); + embed.addFields(fields); + embeds.push(embed); + } + } + console.log(embeds) + if (embeds.length > 0) { + const then = new Date(state.payoutAlertLast); + const twelveHours = 12 * 60 * 60 * 1000; + if (now.getTime() - then.getTime() > twelveHours) { + channel.send({content: "# Unpaid Faction Crimes:", embeds: embeds }); + state.payoutAlertLast = now.toISOString(); + fs.writeFile('./state.json', JSON.stringify(state, null, 4), err => {if (err) {console.error(err)}}); + } + } else { + const twentyFourHoursAgo = new Date(now.getTime() - 24 * 60 * 60 * 1000); + state.payoutAlertLast = twentyFourHoursAgo.toISOString(); + fs.writeFile('./state.json', JSON.stringify(state, null, 4), err => {if (err) {console.error(err)}}); + + } +}; + +module.exports.schedule = '0 * * * *'; \ No newline at end of file diff --git a/torn.js b/torn.js index 4cb1765..0afc6b5 100644 --- a/torn.js +++ b/torn.js @@ -33,6 +33,12 @@ module.exports.user = { } }; +module.exports.item = async (item) => { + const response = await fetch(`https://api.torn.com/v2/torn/${item}/items?sort=ASC&key=${config.torn}`); + const data = await response.json(); + return(data); +} + module.exports.self = { async id() {