const urls = { market: process.env.MARKET_URL_OVERRIDE || 'https://api.warframe.market/v1/items', marketAssets: process.env.MARKET_ASSETS_URL_OVERRIDE || 'https://warframe.market/static/assets/', }; /** * Represents an individual component object of an item. */ export default class Summary { /** * Represents an individual item. * @param {json} itemData the component data to parse into a summary * @constructor */ constructor(itemData) { this.name = itemData.en.item_name.trim(); this.thumbnail = `${urls.marketAssets}${itemData.thumb}`; this.partThumb = `${urls.marketAssets}${itemData.sub_icon}`; this.tradingTax = itemData.trading_tax || 0; this.ducats = itemData.ducats || 0; this.masteryLevel = itemData.mastery_level; this.tradable = itemData.tradable; this.wikiUrl = itemData.en.wiki_link; this.codex = itemData.en.codex; this.description = itemData.en.description.replace(/<\/?p>/gi, ''); this.drops = itemData.en.drop; this.url = `http://warframe.market/items/${itemData.url_name}`; this.type = 'market-v1'; } /** * The components' string representation * @param {string} opt Option, either 'codex', 'item', 'location', 'all' * @returns {string} */ toString(opt = 'item') { let value = this.name; if (opt === 'codex' || opt === 'all') { value += `\`\`\`\nCodex: ${this.codex}\n`; } if (opt === 'item' || opt === 'all') { value += `${this.pad(`Requires: ${this.masteryLevel}`, 15)}| Tax: ${this.pad(`${this.tradingTax}cr`)}\n` + `Item is ${this.tradable ? '' : ' not '} tradable\n` + `${this.pad(`Sold ${this.prices.soldCount} for ${this.prices.soldPrice}`, 15)}|` + `Minimum ${this.prices.minimum} | Maximum ${this.prices.maximum}\n`; } if (opt === 'location' || opt === 'all') { value += `${this.pad(`Drops: ${this.drops.map((drop) => drop.name).join(', ')}`, 15)}\n`; } value += `\`\`\`\n${this.wikiUrl}`; return `\u221F${value}`; } pad(str, length = 10, character = ' ') { let stringRet; if (str.length < length) { stringRet = this.pad(`${str}${character}`); } else { stringRet = str; } return stringRet; } }