This commit is contained in:
2025-11-11 20:39:50 -05:00
parent bc1473027b
commit 665320216e
3 changed files with 104 additions and 26 deletions

View File

@@ -12,7 +12,7 @@ module.exports = async (client, torn, config) => {
if (slot.item_requirement) { if (slot.item_requirement) {
if (slot.item_requirement.is_available === false) { if (slot.item_requirement.is_available === false) {
const username = (await torn.user.profile(slot.user.id)).name; const username = (await torn.user.profile(slot.user.id)).name;
const itemname = (await torn.item(slot.item_requirement.id)).items[0].name; const itemname = (await torn.cache.item(slot.item_requirement.id)).name;
console.debug(`noItemOC: Found crime with unavailable item: ${crime.name}: ${slot.user.id}`); console.debug(`noItemOC: Found crime with unavailable item: ${crime.name}: ${slot.user.id}`);
message += `[${username}](https://www.torn.com/profiles.php?XID=${slot.user.id}) needs [${itemname}](https://www.torn.com/page.php?sid=ItemMarket#/market/view=search&itemID=${slot.item_requirement.id}) for [${crime.name}](https://www.torn.com/factions.php?step=your&type=1#/tab=crimes&crimeId=${crime.id})\n`; message += `[${username}](https://www.torn.com/profiles.php?XID=${slot.user.id}) needs [${itemname}](https://www.torn.com/page.php?sid=ItemMarket#/market/view=search&itemID=${slot.item_requirement.id}) for [${crime.name}](https://www.torn.com/factions.php?step=your&type=1#/tab=crimes&crimeId=${crime.id})\n`;
itemsneeded++; itemsneeded++;

View File

@@ -17,10 +17,10 @@ module.exports = async (client, torn, config) => {
.setURL(`https://www.torn.com/factions.php?step=your&type=7#/tab=crimes&crimeId=${crime.id}`); .setURL(`https://www.torn.com/factions.php?step=your&type=7#/tab=crimes&crimeId=${crime.id}`);
if (crime.rewards.money === 0) { if (crime.rewards.money === 0) {
const itemPromises = crime.rewards.items.map(item => const itemPromises = crime.rewards.items.map(item =>
torn.item(item.id).then(itemData => ({ torn.cache.item(item.id).then(itemData => ({
quantity: item.quantity, quantity: item.quantity,
name: itemData.items[0].name, name: itemData.name,
value: itemData.items[0].value.market_price value: itemData.value.market_price
})) }))
); );
const resolvedItems = await Promise.all(itemPromises); const resolvedItems = await Promise.all(itemPromises);

122
torn.js
View File

@@ -4,10 +4,10 @@ let cache;
try {config = require('./config.json')} catch {return} try {config = require('./config.json')} catch {return}
try {cache = require('./cache.json')} catch { try {cache = require('./cache.json')} catch {
cache = { cache = {
items: {},
users: {}, users: {},
factions: {}, factions: {},
companies: {} companies: {},
items: {}
}; };
fs.writeFileSync('./cache.json', JSON.stringify(cache)); fs.writeFileSync('./cache.json', JSON.stringify(cache));
return; return;
@@ -42,18 +42,72 @@ module.exports.cache = {
last = new Date(now - twelveHours).getTime(); last = new Date(now - twelveHours).getTime();
} }
if (cache.users[user] && (now - last < twelveHours)) { if (cache.users[user] && (now - last < twelveHours)) {
console.debug(`Cache: Hit for ${cache.users[user].name}`) console.debug(`Cache: Hit for user ${cache.users[user].name}`)
return(cache.users[user]); return(cache.users[user]);
} else { } else {
console.debug(`Cache: Miss for ${user}`) console.debug(`Cache: Miss for user ${user}`)
await module.exports.user.basic(user); await module.exports.user.basic(user);
console.debug(`Cache: Resolved to ${cache.users[user].name}`) console.debug(`Cache: Resolved user ${cache.users[user].name}`)
return(cache.users[user]); return(cache.users[user]);
} }
},
async faction(faction) {
const twelveHours = 12 * 60 * 60 * 1000;
const now = new Date().getTime();
let last
try {
last = new Date(cache.factions[faction].updated).getTime();
} catch {
last = new Date(now - twelveHours).getTime();
}
if (cache.factions[faction] && (now - last < twelveHours)) {
console.debug(`Cache: Hit for faction ${cache.factions[faction].name}`)
return(cache.factions[faction]);
} else {
console.debug(`Cache: Miss for faction ${faction}`)
await module.exports.faction.basic(faction);
console.debug(`Cache: Resolved faction ${cache.factions[faction].name}`)
return(cache.factions[faction]);
}
},
async company(company) {
const twelveHours = 12 * 60 * 60 * 1000;
const now = new Date().getTime();
let last
try {
last = new Date(cache.companies[company].updated).getTime();
} catch {
last = new Date(now - twelveHours).getTime();
}
if (cache.companies[company] && (now - last < twelveHours)) {
console.debug(`Cache: Hit for company ${cache.companies[company].name}`)
return(cache.companies[company]);
} else {
console.debug(`Cache: Miss for company ${company}`)
await module.exports.company(company);
console.debug(`Cache: Resolved company ${cache.companies[company].name}`)
return(cache.companies[company]);
}
},
async item(item) {
const sevenDays = 7 * 24 * 60 * 60 * 1000;
const now = new Date().getTime();
let last
try {
last = new Date(cache.items[item].updated).getTime();
} catch {
last = new Date(now - sevenDays).getTime();
}
if (cache.items[item] && (now - last < sevenDays)) {
console.debug(`Cache: Hit for item ${cache.items[item].name}`)
return(cache.items[item]);
} else {
console.debug(`Cache: Miss for item ${item}`)
await module.exports.item(item);
console.debug(`Cache: Resolved item ${cache.items[item].name}`)
return(cache.items[item]);
}
} }
//async faction(faction) {},
//async company(company) {},
//async item(item) {}
} }
module.exports.user = { module.exports.user = {
@@ -104,18 +158,28 @@ module.exports.faction = {
} else { } else {
response = await fetch(`https://api.torn.com/v2/faction/basic?key=${config.torn}`); response = await fetch(`https://api.torn.com/v2/faction/basic?key=${config.torn}`);
} }
const data = await response.json(); const data = (await response.json()).basic;
return(data.basic); const now = new Date();
cache.factions[data.id] = {
name: data.name,
leader_id: data.leader_id,
capacity: data.capacity,
rank: data.rank,
best_chain: data.best_chain,
updated: now.toISOString()
};
fs.writeFileSync('./cache.json', JSON.stringify(cache));
return(data);
}, },
async members(faction) { async members(faction) {
let response let response
if (faction) { if (faction) {
response = await fetch(`https://api.torn.com/v2/faction/${faction}/members?striptags=true&key=${config.torn}`); response = (await fetch(`https://api.torn.com/v2/faction/${faction}/members?striptags=true&key=${config.torn}`)).members;
} else { } else {
response = await fetch(`https://api.torn.com/v2/faction/members?striptags=true&key=${config.torn}`); response = (await fetch(`https://api.torn.com/v2/faction/members?striptags=true&key=${config.torn}`)).members;
} }
const data = await response.json(); const data = await response.json();
return(data.members); return(data);
}, },
async crimes(category) { async crimes(category) {
let response let response
@@ -135,20 +199,34 @@ module.exports.faction = {
} }
module.exports.company = async (company) => { module.exports.company = async (company) => {
let response let response
if (company) { if (company) {
response = await fetch(`https://api.torn.com/company/${company}?selections=profile&key=${config.torn}`); response = await fetch(`https://api.torn.com/company/${company}?selections=profile&key=${config.torn}`);
} else { } else {
response = await fetch(`https://api.torn.com/company/?selections=profile&key=${config.torn}`); response = await fetch(`https://api.torn.com/company/?selections=profile&key=${config.torn}`);
} }
const data = await response.json(); const data = await response.json();
return(data.company); const now = new Date();
cache.companies[data.company.ID] = {
name: data.company.name,
id: data.company.ID,
company_type: data.company.company_type,
director_id: data.company.director,
rating: data.company.rating,
updated: now.toISOString()
};
fs.writeFileSync('./cache.json', JSON.stringify(cache));
return(data.company);
} }
module.exports.item = async (item) => { module.exports.item = async (item) => {
const response = await fetch(`https://api.torn.com/v2/torn/${item}/items?sort=ASC&key=${config.torn}`); const response = await fetch(`https://api.torn.com/v2/torn/${item}/items?sort=ASC&key=${config.torn}`);
const data = await response.json(); const data = await response.json();
return(data); const now = new Date();
cache.items[item] = data.items[0];
cache.items[item].updated = now.toISOString();
fs.writeFileSync('./cache.json', JSON.stringify(cache));
return(data.items[0]);
} }