diff --git a/README.md b/README.md index f01273c..e594051 100644 --- a/README.md +++ b/README.md @@ -4,25 +4,28 @@ ## Features: -* Tipbot for LBC. Responds to `!tip`. -* Price bot displays price of lbc for currency given. Responds to `!price - ` +* Price bot displays price of lbc for currency given. Responds to `!price ` * Stats bot display current market stats of lbc. Responds to `!stats` * Hash bot displays current hashrate of network. Responds to `!hash` + + Also Includes `!hash power ` to calculate given MH/s to LBC per hr, day, week, month. + * Github Release Notes bot displays release notes for current lbry-app release. - Responds to `!releasenotes` User with Defined Perms `!releasenotes post` to - send to specified channel + Responds to `!releasenotes` + + (moderator only) `!releasenotes post` to send to specified channel -* Purge Bot (moderator only) deletes X amount of messages. User with Defined - Perms Responds to `!purge ` +* Purge Bot (moderator only) deletes X amount of messages. Responds to `!purge ` * Speech bot displays top claim from provided image name(coming soon posting to speech). Responds to `!speech ` -* Welcome bot sends Direct Message when new users join, User with Defined Perms - can send using `!welcome <@username>` +* Welcome bot sends Direct Message when new users join, + + (moderator only) Responds to `!welcome <@username>` + * Spam Detection Bot to Prevent Discord Raids and Spammers * Dynamic plugin loading with permission support. diff --git a/bot/bot.js b/bot/bot.js index 3bfdd3c..5b1ebcc 100644 --- a/bot/bot.js +++ b/bot/bot.js @@ -43,7 +43,7 @@ bot.on("ready", function() { ); require("./plugins.js").init(); console.log("type " + config.prefix + "help in Discord for a commands list."); - bot.user.setGame(config.prefix + "help | Tipping not available"); + bot.user.setGame(config.prefix + "help"); }); bot.on("disconnected", function() { diff --git a/bot/modules/hash.js b/bot/modules/hash.js index 1610b7c..42f9453 100644 --- a/bot/modules/hash.js +++ b/bot/modules/hash.js @@ -1,121 +1,172 @@ -let needle = require("needle"); -let config = require("config"); -let hasHashBotChannels = require("../helpers.js").hasHashBotChannels; -let inPrivate = require("../helpers.js").inPrivate; -let ChannelID = config.get("hashbot").mainchannel; +let needle = require('needle'); +let config = require('config'); +let hasHashBotChannels = require('../helpers.js').hasHashBotChannels; +let inPrivate = require('../helpers.js').inPrivate; +let ChannelID = config.get('hashbot').mainchannel; exports.commands = [ - "hash" // command that is in this file, every command needs it own export as shown below -]; + "hash" // command that is in this file, every command needs it own export as shown below +] -exports.custom = ["timedhash"]; +exports.custom = [ + "timedhash" +] exports.timedhash = function(bot) { - setInterval(function() { - sendMiningInfo(bot); - }, 6 * 60 * 60 * 1000); + setInterval(function() { + sendMiningInfo(bot); + }, 6 * 60 * 60 * 1000); + + function sendMiningInfo(bot) { +needle.get('https://explorer.lbry.io/api/v1/status', function(error, response) { + if (error || response.statusCode !== 200) { + msg.channel.send('Explorer API is not available'); + } + else { + var data = response.body; + var height = Number(data.status.height); + var hashrate = data.status.hashrate; + var difficulty = Number(data.status.difficulty); + needle.get('https://whattomine.com/coins/164.json', function(error, response) { + if (error || response.statusCode !== 200) { + msg.channel.send('whattomine API is not available'); + } else { + var data = response.body; + var reward = Number(data.block_reward); + var block_time = Number(data.block_time); + var difficulty24 = Number(data.difficulty24); + description = "Hashrate: "+numberWithCommas(hashrate)+"\n" + + "Difficulty: "+numberWithCommas(difficulty.toFixed(0))+"\n" + + "Difficulty 24 Hour Average: "+numberWithCommas(difficulty24.toFixed(0))+"\n" + + "Current block: "+numberWithCommas(height.toFixed(0))+"\n" + + "Block Time: "+numberWithCommas(block_time.toFixed(0))+" seconds \n" + + "Block Reward: "+numberWithCommas(reward.toFixed(0))+" LBC \n" + + "Sources: https://explorer.lbry.io & \n" + + "https://whattomine.com/coins/164-lbc-lbry"; + const embed = { + "description": description, + "color": 7976557, + "author": { + "name": "LBRY Network Stats", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + }; + bot.channels.get(ChannelID).send({ embed }) + return + } + }); + } + }); + function numberWithCommas(x) { + return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); +} +} +} - function sendMiningInfo(bot) { - needle.get("https://explorer.lbry.io/api/v1/status", function( - error, - response - ) { - if (error || response.statusCode !== 200) { - bot.channels.get(ChannelID).send("Explorer API is not available"); - } else { - var data, - hashrate = "", - difficulty = "", - height = ""; - data = response.body; - height += data.status.height; - hashrate += data.status.hashrate; - difficulty += data.status.difficulty; - description = - "Hashrate: " + - hashrate + - "\n" + - "Difficulty: " + - difficulty + - "\n" + - "Current block: " + - height + - "\n" + - "Source: https://explorer.lbry.io"; - const embed = { - description: description, - color: 7976557, - author: { - name: "LBRY Explorer Stats", - url: "https://explorer.lbry.io", - icon_url: "https://i.imgur.com/yWf5USu.png" - } - }; - bot.channels.get(ChannelID).send({ - embed - }); - } - }); - } -}; exports.hash = { - usage: "", - description: "Displays current Hashrate of Network", - process: function(bot, msg) { - var command = "!hash"; - sendMiningInfo(bot, msg); + usage: "", + description: 'Displays current Hashrate of Network\n**!hash power **\n Displays potential Earnings For Given Hashrate', + process: function(bot,msg,suffix){ + var command = '!hash'; + words = suffix.trim().split(' ').filter( function(n){return n !== "";} ); + profitcommand = words[0]; + myhashrate = words[1]; + console.log(suffix) + if (profitcommand == "power") { + sendProfitInfo(bot, msg, suffix); + return + } else { + sendMiningInfo(bot, msg, suffix); + return + } + - function sendMiningInfo(bot, msg) { - if (!inPrivate(msg) && !hasHashBotChannels(msg)) { - msg.channel.send( - "Please use <#" + ChannelID + "> or DMs to talk to hash bot." - ); - return; - } - needle.get("https://explorer.lbry.io/api/v1/status", function( - error, - response - ) { - if (error || response.statusCode !== 200) { - msg.channel.send("Explorer API is not available"); - } else { - var data, - hashrate = "", - difficulty = "", - height = ""; - data = response.body; - height += data.status.height; - hashrate += data.status.hashrate; - difficulty += data.status.difficulty; - description = - "Hashrate: " + - hashrate + - "\n" + - "Difficulty: " + - difficulty + - "\n" + - "Current block: " + - height + - "\n" + - "Source: https://explorer.lbry.io"; - const embed = { - description: description, - color: 7976557, - author: { - name: "LBRY Explorer Stats", - url: "https://explorer.lbry.io", - icon_url: "https://i.imgur.com/yWf5USu.png" - } - }; - msg.channel.send({ - embed - }); - } - }); - } - - function numberWithCommas(x) { - return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); - } +function sendMiningInfo(bot, msg, suffix) { + if(!inPrivate(msg) && !hasHashBotChannels(msg)){ + msg.channel.send('Please use <#' + ChannelID + '> or DMs to talk to hash bot.'); + return; } -}; + needle.get('https://explorer.lbry.io/api/v1/status', function(error, response) { + if (error || response.statusCode !== 200) { + msg.channel.send('Explorer API is not available'); + } + else { + var data = response.body; + var height = Number(data.status.height); + var hashrate = data.status.hashrate; + var difficulty = Number(data.status.difficulty); + needle.get('https://whattomine.com/coins/164.json', function(error, response) { + if (error || response.statusCode !== 200) { + msg.channel.send('whattomine API is not available'); + } else { + var data = response.body; + var reward = Number(data.block_reward); + var block_time = Number(data.block_time); + var difficulty24 = Number(data.difficulty24); + description = "Hashrate: "+numberWithCommas(hashrate)+"\n" + + "Difficulty: "+numberWithCommas(difficulty.toFixed(0))+"\n" + + "Difficulty 24 Hour Average: "+numberWithCommas(difficulty24.toFixed(0))+"\n" + + "Current block: "+numberWithCommas(height.toFixed(0))+"\n" + + "Block Time: "+numberWithCommas(block_time.toFixed(0))+" seconds \n" + + "Block Reward: "+numberWithCommas(reward.toFixed(0))+" LBC \n" + + "Sources: https://explorer.lbry.io & \n" + + "https://whattomine.com/coins/164-lbc-lbry"; + const embed = { + "description": description, + "color": 7976557, + "author": { + "name": "LBRY Network Stats", + "icon_url": "https://i.imgur.com/yWf5USu.png" + } + }; + msg.channel.send({ embed }); + return + } + }); + } + }); +} +function sendProfitInfo(bot, msg, suffix) { + needle.get('https://whattomine.com/coins/164.json', function(error, response) { + if (error || response.statusCode !== 200) { + msg.channel.send('whattomine API is not available'); + } else { + words = suffix.trim().split(' ').filter( function(n){return n !== "";} ); + var myhashrate = words[1]; + if (myhashrate == "" || myhashrate == null || myhashrate == undefined || myhashrate == " ") { + myhashrate = "100"; + } + var Diff = response.body.difficulty24; + var Reward = response.body.block_reward; + var myHash = Number(myhashrate) + var LBC = myHash / 2000 * (1 / (Diff * 2^32) * Reward) * 3600 + var LBC24 = myHash / 2000 * (1 / (Diff * 2^32) * Reward) * 86400 + var LBC1w = myHash / 2000 * (1 / (Diff * 2^32) * Reward) * 604800 + var LBC1m = myHash / 2000 * (1 / (Diff * 2^32) * Reward) * 2628000 + var message = "With **" + myHash + " Mh/s** and Average 24 hour Difficulty: **" + Diff.toFixed(0) + "**\n" + + "You can potentially earn the following amounts of **LBC**: \n" + + "1 Hour = **" + LBC.toFixed(4) + "** \n" + + "1 Day = **" + LBC24.toFixed(2) + "** \n" + + "1 Week = **" + LBC1w.toFixed(4) + "** \n" + + "1 Month = **" + LBC1m.toFixed(4) + "** \n" + const embed = { + "description": message, + "color": 7976557, + "author": { + "name": "Hashing Power Calculator!", + "icon_url": "https://i.imgur.com/nKHVQgq.png" + } + }; + msg.channel.send({ embed }) + return + } + }); +} +function numberWithCommas(x) { + return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); +} + + + +} +} \ No newline at end of file diff --git a/bot/modules/stats.js b/bot/modules/stats.js index 0ee828b..276bff8 100644 --- a/bot/modules/stats.js +++ b/bot/modules/stats.js @@ -1,304 +1,211 @@ -let jp = require("jsonpath"); -let moment = require("moment"); -let numeral = require("numeral"); -let request = require("request"); -let config = require("config"); -let hasStatsBotChannels = require("../helpers.js").hasStatsBotChannels; -let inPrivate = require("../helpers.js").inPrivate; -let ChannelID = config.get("statsbot").mainchannel; +let jp = require('jsonpath'); +let moment = require('moment'); +let numeral = require('numeral'); +let request = require('request'); +let config = require('config'); +let needle = require('needle'); +let hasStatsBotChannels = require('../helpers.js').hasStatsBotChannels; +let inPrivate = require('../helpers.js').inPrivate; +let ChannelID = config.get('statsbot').mainchannel; exports.commands = [ - "stats" // command that is in this file, every command needs it own export as shown below -]; + "stats" // command that is in this file, every command needs it own export as shown below +] exports.stats = { - usage: "", - description: "Displays current a list of current Market stats", - process: function(bot, msg, suffix) { - var options = { - defaultCurrency: "USD", + usage: "", + description: 'Displays current a list of current Market stats', + process: function(bot,msg,suffix){ + var options = { + defaultCurrency: 'USD', - // supported currencies and api steps to arrive at the final value - currencies: { - USD: { - steps: ["LBCUSD"], - format: "$0,0.00", - sign: "USD $" - }, - BTC: { - steps: ["LBCBTC"], - format: "BTC 0,0.00000000", - sign: "BTC" - }, - ETH: { - steps: ["LBCETH"], - format: "ETH 0,0.00000000", - sign: "ETH" - }, - GBP: { - steps: ["LBCGBP"], - format: "£0,0.00", - sign: "£" - }, - EUR: { - steps: ["LBCEUR"], - format: "€0,0.00", - sign: "€" - }, - CAD: { - steps: ["LBCCAD"], - format: "$0,0.00", - sign: "CAD $" - }, - AUD: { - steps: ["LBCAUD"], - format: "$0,0.00", - sign: "AUD $" - }, - IDR: { - steps: ["LBCIDR"], - format: "Rp0,0.00", - sign: "Rp" + // supported currencies and api steps to arrive at the final value + currencies: { + USD: { steps: ['LBCUSD'], format: '$0,0.00', sign:'USD $' }, + BTC: { steps: ['LBCBTC'], format: 'BTC 0,0.00000000', sign:'BTC' }, + ETH: { steps: ['LBCETH'], format: 'ETH 0,0.00000000', sign: 'ETH' }, + GBP: { steps: ['LBCGBP'], format: '£0,0.00', sign: '£' }, + EUR: { steps: ['LBCEUR'], format: '€0,0.00', sign: '€' }, + CAD: { steps: ['LBCCAD'], format: '$0,0.00', sign: 'CAD $' }, + AUD: { steps: ['LBCAUD'], format: '$0,0.00', sign: 'AUD $' }, + IDR: { steps: ['LBCIDR'], format: 'Rp0,0.00', sign: 'Rp' } + }, + + // api steps + api: { + LBCBTC: { url: 'https://bittrex.com/api/v1.1/public/getticker?market=BTC-LBC', path: '$.result.Bid' }, + LBCUSD: { url: 'https://api.coinmarketcap.com/v1/ticker/library-credit/?convert=usd', path: '$[0].price_usd' }, + LBCGBP: { url: 'https://api.coinmarketcap.com/v1/ticker/library-credit/?convert=gbp', path: '$[0].price_gbp' }, + LBCETH: { url: 'https://api.coinmarketcap.com/v1/ticker/library-credit/?convert=eth', path: '$[0].price_eth' }, + LBCEUR: { url: 'https://api.coinmarketcap.com/v1/ticker/library-credit/?convert=eur', path: '$[0].price_eur' }, + LBCAUD: { url: 'https://api.coinmarketcap.com/v1/ticker/library-credit/?convert=aud', path: '$[0].price_aud' }, + LBCCAD: { url: 'https://api.coinmarketcap.com/v1/ticker/library-credit/?convert=cad', path: '$[0].price_cad' }, + LBCIDR: { url: 'https://api.coinmarketcap.com/v1/ticker/library-credit/?convert=idr', path: '$[0].price_idr'} + }, + + // display date/time format + dtFormat: 'Do MMM YYYY h:mma [UTC]', + + // refresh rate in milliseconds to retrieve a new price (default to 10 minutes) + refreshTime: 300000 +}; + +// store the last retrieved rate +var command = '!stats'; + + var currency = options.defaultCurrency; + var amount = 1; +if(!inPrivate(msg) && !hasStatsBotChannels(msg)){ + msg.channel.send('Please use <#' + ChannelID + '> or DMs to talk to stats bot.'); + return; + } else { + doSteps(bot, msg, 'USD', amount); + doSteps(bot, msg, 'EUR', amount); + doSteps(bot, msg, 'GBP', amount); + doSteps(bot, msg, 'ETH', amount); + doSteps(bot, msg, 'BTC', amount); + doSteps(bot, msg, 'CAD', amount); + doSteps(bot, msg, 'AUD', amount); + doSteps(bot, msg, 'IDR', amount); + marketstats(bot,msg,suffix); + //marketstats(bot,msg); + volume(bot,msg); + } + +function formatMessage(amount, rate, option) { + var cur = option.sign; + var value = rate.rate * amount; + if (option.sign == 'USD $' || option.sign == 'CAD $' || option.sign == 'AUD $' || option.sign == '£' || option.sign == '€'|| option.sign == 'Rp'){ + return '*' + numeral(amount).format('0,0[.][00000000]') + ' LBC = ' + cur +' '+ value.toFixed(2) + '*'; + } + else { + return '*' + numeral(amount).format('0,0[.][00000000]') + ' LBC = ' + cur +' ' + numeral(value).format('0,0[.][00000000]') + '*'; + } +} + +function formaty(n, decimals, currency) { + n = parseFloat(n); + return currency + " " + n.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, "$1,"); +} + +function doSteps(bot, msg, currency, amount) { + + var option = options.currencies[currency]; + // copy the steps array + var steps = []; + for (var i = 0; i < option.steps.length; i++) { + steps.push(option.steps[i]); } - }, - // api steps - api: { - LBCBTC: { - url: "https://bittrex.com/api/v1.1/public/getticker?market=BTC-LBC", - path: "$.result.Bid" - }, - LBCUSD: { - url: - "https://api.coinmarketcap.com/v1/ticker/library-credit/?convert=usd", - path: "$[0].price_usd" - }, - LBCGBP: { - url: - "https://api.coinmarketcap.com/v1/ticker/library-credit/?convert=gbp", - path: "$[0].price_gbp" - }, - LBCETH: { - url: - "https://api.coinmarketcap.com/v1/ticker/library-credit/?convert=eth", - path: "$[0].price_eth" - }, - LBCEUR: { - url: - "https://api.coinmarketcap.com/v1/ticker/library-credit/?convert=eur", - path: "$[0].price_eur" - }, - LBCAUD: { - url: - "https://api.coinmarketcap.com/v1/ticker/library-credit/?convert=aud", - path: "$[0].price_aud" - }, - LBCCAD: { - url: - "https://api.coinmarketcap.com/v1/ticker/library-credit/?convert=cad", - path: "$[0].price_cad" - }, - LBCIDR: { - url: - "https://api.coinmarketcap.com/v1/ticker/library-credit/?convert=idr", - path: "$[0].price_idr" - } - }, + processSteps(bot, msg, currency, 0, amount, steps, option); +} - // display date/time format - dtFormat: "Do MMM YYYY h:mma [UTC]", +function marketstats(bot,msg,suffix) { + var statsurl='https://api.coinmarketcap.com/v1/ticker/library-credit/'; - // refresh rate in milliseconds to retrieve a new price (default to 10 minutes) - refreshTime: 300000 - }; + request.get(statsurl, function(error, response, body) { + if (error) { + msg.channel.send(err.message ? err.message : 'The request could not be completed at this time. Please try again later.'); + return; + } + var marketcap = 0; + try { + marketcap = jp.query(JSON.parse(body), '$[0].market_cap_usd'); + if (Array.isArray(marketcap) && marketcap.length > 0) { + marketcap = marketcap[0]; + marketcap = formaty(marketcap,2,'$') + } - // store the last retrieved rate - var command = "!stats"; + } catch (ignored) { + // invalid response or pair rate + } - var currency = options.defaultCurrency; - var amount = 1; - if (!inPrivate(msg) && !hasStatsBotChannels(msg)) { - msg.channel.send( - "Please use <#" + ChannelID + "> or DMs to talk to stats bot." - ); - return; + var statmsg = '*'+'Marketcap: '+marketcap+'*\n'; + + msg.channel.send(statmsg); + + }); +} + +function volume(bot,msg) { + needle.get('https://api.coinmarketcap.com/v1/ticker/library-credit/', function(error, response) { + if (error || response.statusCode !== 200) { + msg.channel.send('coinmarketcap API is not available'); } else { - doSteps(bot, msg, "USD", amount); - doSteps(bot, msg, "EUR", amount); - doSteps(bot, msg, "GBP", amount); - doSteps(bot, msg, "ETH", amount); - doSteps(bot, msg, "BTC", amount); - doSteps(bot, msg, "CAD", amount); - doSteps(bot, msg, "AUD", amount); - doSteps(bot, msg, "IDR", amount); - setTimeout(function() { - marketstats(bot, msg, suffix); - }, 250); - //marketstats(bot,msg); - //volume24(bot,msg); can't get this part to work, someone help me fix - i think it's because 24h_volume_usd starts with number - } + var json = response.body[0]; + var newjson = parse_obj(json) + var parse = JSON.stringify(newjson) + var volume = parse.replace(/[^0-9]/g, ''); + console.log(volume) + console.log(newjson) + var statmsg = '*Volume: $'+volume+'*\n'; + msg.channel.send(statmsg); + } + }); +} - function formatMessage(amount, rate, option) { - var cur = option.sign; - var value = rate.rate * amount; - if ( - option.sign == "USD $" || - option.sign == "CAD $" || - option.sign == "AUD $" || - option.sign == "£" || - option.sign == "€" || - option.sign == "Rp" - ) { - return ( - "*" + - numeral(amount).format("0,0[.][00000000]") + - " LBC = " + - cur + - " " + - value.toFixed(2) + - "*" - ); - } else { - return ( - "*" + - numeral(amount).format("0,0[.][00000000]") + - " LBC = " + - cur + - " " + - numeral(value).format("0,0[.][00000000]") + - "*" - ); - } - } - - function formaty(n, decimals, currency) { - n = parseFloat(n); - return ( - currency + " " + n.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, "$1,") - ); - } - - function doSteps(bot, msg, currency, amount) { - var option = options.currencies[currency]; - // copy the steps array - var steps = []; - for (var i = 0; i < option.steps.length; i++) { - steps.push(option.steps[i]); - } - - processSteps(bot, msg, currency, 0, amount, steps, option); - } - - function marketstats(bot, msg, suffix) { - var statsurl = "https://api.coinmarketcap.com/v1/ticker/library-credit/"; - - request.get(statsurl, function(error, response, body) { - if (error) { - msg.channel.send( - err.message - ? err.message - : "The request could not be completed at this time. Please try again later." - ); - return; +function parse_obj(obj) +{ + var array = []; + var prop; + for (prop in obj) + { + if (obj.hasOwnProperty(prop)) + { + var key = parseInt(prop, 10); + var value = obj[prop]; + if (typeof value == "object") + { + value = parse_obj(value); + } + array[key] = value; } - var marketcap = 0; - try { - marketcap = jp.query(JSON.parse(body), "$[0].market_cap_usd"); - if (Array.isArray(marketcap) && marketcap.length > 0) { - marketcap = marketcap[0]; - marketcap = formaty(marketcap, 2, "$"); - } - } catch (ignored) { - // invalid response or pair rate - } - - var statmsg = "*" + "Marketcap: " + marketcap + "*\n"; - - msg.channel.send(statmsg); - }); } + return array; +} - function volume24(bot, msg, suffix) { - var statsurl = "https://api.coinmarketcap.com/v1/ticker/library-credit/"; - request.get(statsurl, function(error, response, body) { - if (error) { - msg.channel.send( - err.message - ? err.message - : "The request could not be completed at this time. Please try again later." - ); - return; - } - var volume24 = 0; - try { - volume24 = jp.query(JSON.parse(body), "$[0].24h_volume_usd"); - if (Array.isArray(volume24) && volume24.length > 0) { - volume24 = volume24[0]; - } - } catch (ignored) { - // invalid response or pair rate - } - - var statmsg = "*" + "Volume: $" + volume24 + "*\n"; - - msg.channel.send(statmsg); - }); - } - - function processSteps(bot, msg, currency, rate, amount, steps, option) { - if (steps.length > 0) { +function processSteps(bot, msg, currency, rate, amount, steps, option) { + if (steps.length > 0) { var pairName = steps[0]; if (!options.api[pairName]) { - msg.channel.send( - "There was a configuration error. " + - pairName + - " pair was not found." - ); - return; + msg.channel.send('There was a configuration error. ' + pairName + ' pair was not found.'); + return; } var pair = options.api[pairName]; request.get(pair.url, function(error, response, body) { - if (error) { - msg.channel.send( - err.message - ? err.message - : "The request could not be completed at this time. Please try again later." - ); - return; - } - var pairRate = 0; - try { - pairRate = jp.query(JSON.parse(body), pair.path); - if (Array.isArray(pairRate) && pairRate.length > 0) { - pairRate = pairRate[0]; + if (error) { + msg.channel.send(err.message ? err.message : 'The request could not be completed at this time. Please try again later.'); + return; } - } catch (ignored) { - // invalid response or pair rate - } - - if (pairRate > 0) { - rate = rate === 0 ? pairRate : rate * pairRate; - steps.shift(); - if (steps.length > 0) { - processSteps(bot, currency, rate, amount, steps, option); - return; + var pairRate = 0; + try { + pairRate = jp.query(JSON.parse(body), pair.path); + if (Array.isArray(pairRate) && pairRate.length > 0) { + pairRate = pairRate[0]; + } + } catch (ignored) { + // invalid response or pair rate } - // final step, cache and then response - var result = { - rate: rate, - time: moment() - }; + if (pairRate > 0) { + rate = (rate === 0) ? pairRate : rate * pairRate; + steps.shift(); + if (steps.length > 0) { + processSteps(bot, currency, rate, amount, steps, option); + return; + } - msg.channel.send(formatMessage(amount, result, option)); - } else { - msg.channel.send( - "The rate returned for the " + pairName + " pair was invalid." - ); - } + // final step, cache and then response + var result = { rate: rate, time: moment() }; + + msg.channel.send(formatMessage(amount, result, option)); + } else { + msg.channel.send('The rate returned for the ' + pairName + ' pair was invalid.'); + } }); - } } - } -}; +} + + } +} \ No newline at end of file diff --git a/bot/modules/tipbot.js b/bot/modules/tipbot.js deleted file mode 100644 index e9b7d2b..0000000 --- a/bot/modules/tipbot.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; - -const bitcoin = require("bitcoin"); -let config = require("config"); -config = config.get("lbrycrd"); -const lbry = new bitcoin.Client(config); - -exports.commands = ["tip"]; -exports.tip = { - usage: "", - description: - "balance: get your balance\n deposit: get address for your deposits\n withdraw ADDRESS AMOUNT: withdraw AMOUNT credits to ADDRESS\n : mention a user with @ and then the amount to tip them", - process: async function(bot, msg, suffix) { - return; // Tipping is now handled by the separate tipbot(in branch tipbot_dc), no need to to anything here... - } -}; diff --git a/config/default.json.example b/config/default.json.example index be29d84..5ccb6e7 100644 --- a/config/default.json.example +++ b/config/default.json.example @@ -9,13 +9,6 @@ "port": 9245, "user": "lbry", "pass": "lbry" - }, - "mongodb": { - "url":"mongodb://localhost:27017/wunderbot" - }, - "moderation":{ - "perms": ["LBRY MODS","LBRY TEAM"], // Roles that have access to all commands. - "logchannel": "371620338263523328" // Channel to log the bots moderation.. }, //define channels for Commands.js usage "Channels":{ diff --git a/package.json b/package.json index 577167e..dc76459 100644 --- a/package.json +++ b/package.json @@ -10,9 +10,11 @@ "jsonpath": "^0.2.12", "moment": "^2.19.1", "mongoose": "^4.12.3", + "needle": "^2.0.1", "node-config": "^0.0.2", "numeral": "^2.0.6", - "request": "^2.83.0" + "request": "^2.83.0", + "wget": "^0.0.1" }, "scripts": { "prettier": "prettier * --write", diff --git a/yarn.lock b/yarn.lock index 3b97ab8..e8da305 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26,28 +26,14 @@ ajv@^5.1.0: json-schema-traverse "^0.3.0" json-stable-stringify "^1.0.1" -ansi-escapes@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" - ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" -ansi-styles@^3.1.0, ansi-styles@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" - dependencies: - color-convert "^1.9.0" - anymatch@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" @@ -55,10 +41,6 @@ anymatch@^1.3.0: micromatch "^2.1.5" normalize-path "^2.0.0" -app-root-path@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" - aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -70,12 +52,6 @@ are-we-there-yet@~1.1.2: delegates "^1.0.0" readable-stream "^2.0.6" -argparse@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" - dependencies: - sprintf-js "~1.0.2" - arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" @@ -493,7 +469,7 @@ caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" -chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: +chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -503,14 +479,6 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.1, chalk@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" - dependencies: - ansi-styles "^3.1.0" - escape-string-regexp "^1.0.5" - supports-color "^4.0.0" - chokidar@^1.6.1: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" @@ -540,23 +508,6 @@ cjson@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cjson/-/cjson-0.2.1.tgz#73cd8aad65d9e1505f9af1744d3b79c1527682a5" -cli-cursor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" - dependencies: - restore-cursor "^1.0.1" - -cli-spinners@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" - -cli-truncate@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" - dependencies: - slice-ansi "0.0.4" - string-width "^1.0.1" - co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -565,16 +516,6 @@ code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" -color-convert@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" - dependencies: - color-name "^1.1.1" - -color-name@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - colors@0.5.x: version "0.5.1" resolved "https://registry.yarnpkg.com/colors/-/colors-0.5.1.tgz#7d0023eaeb154e8ee9fce75dcb923d0ed1667774" @@ -585,7 +526,7 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@^2.11.0, commander@^2.9.0: +commander@^2.11.0: version "2.11.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" @@ -616,27 +557,6 @@ core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" -cosmiconfig@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-1.1.0.tgz#0dea0f9804efdfb929fbb1b188e25553ea053d37" - dependencies: - graceful-fs "^4.1.2" - js-yaml "^3.4.3" - minimist "^1.2.0" - object-assign "^4.0.1" - os-homedir "^1.0.1" - parse-json "^2.2.0" - pinkie-promise "^2.0.0" - require-from-string "^1.1.0" - -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - cryptiles@2.x.x: version "2.0.5" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" @@ -655,11 +575,7 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -date-fns@^1.27.2: - version "1.29.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" - -debug@^2.2.0, debug@^2.6.8, debug@^2.6.9: +debug@^2.1.2, debug@^2.2.0, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: @@ -703,25 +619,15 @@ ecc-jsbn@~0.1.1: dependencies: jsbn "~0.1.0" -elegant-spinner@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" - embed-creator@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/embed-creator/-/embed-creator-1.1.4.tgz#7f8a783db6ae384d029e746837d65553e6ff0f9e" -error-ex@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" - dependencies: - is-arrayish "^0.2.1" - es6-promise@3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.2.1.tgz#ec56233868032909207170c39448e24449dd1fc4" -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -751,10 +657,6 @@ esprima@1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.2.tgz#76a0fd66fcfe154fd292667dc264019750b1657b" -esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" - estraverse@~0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-0.0.4.tgz#01a0932dfee574684a598af5a67c3bf9b6428db2" @@ -767,22 +669,6 @@ esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" -execa@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -exit-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" @@ -813,13 +699,6 @@ fast-deep-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" -figures@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" @@ -909,14 +788,6 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -get-own-enumerable-property-symbols@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz#5c4ad87f2834c4b9b4e84549dc1e0650fb38c24b" - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -983,10 +854,6 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -1052,15 +919,9 @@ husky@^0.14.3: normalize-path "^1.0.0" strip-indent "^2.0.0" -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - dependencies: - repeating "^2.0.0" - -indent-string@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" +iconv-lite@^0.4.4: + version "0.4.19" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" inflight@^1.0.4: version "1.0.6" @@ -1083,10 +944,6 @@ invariant@^2.2.2: dependencies: loose-envify "^1.0.0" -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" @@ -1121,10 +978,6 @@ is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - is-finite@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" @@ -1143,12 +996,6 @@ is-glob@^2.0.0, is-glob@^2.0.1: dependencies: is-extglob "^1.0.0" -is-glob@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" - dependencies: - is-extglob "^2.1.1" - is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" @@ -1161,10 +1008,6 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" -is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" @@ -1173,18 +1016,6 @@ is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -1193,10 +1024,6 @@ isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" @@ -1207,19 +1034,6 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -jest-get-type@^21.2.0: - version "21.2.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.2.0.tgz#f6376ab9db4b60d81e39f30749c6c466f40d4a23" - -jest-validate@^21.1.0: - version "21.2.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-21.2.1.tgz#cc0cbca653cd54937ba4f2a111796774530dd3c7" - dependencies: - chalk "^2.0.1" - jest-get-type "^21.2.0" - leven "^2.1.0" - pretty-format "^21.2.1" - jison-lex@0.2.x: version "0.2.1" resolved "https://registry.yarnpkg.com/jison-lex/-/jison-lex-0.2.1.tgz#ac4b815e8cce5132eb12b5dfcfe8d707b8844dfe" @@ -1244,13 +1058,6 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@^3.4.3: - version "3.10.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -1323,81 +1130,10 @@ kind-of@^4.0.0: dependencies: is-buffer "^1.1.5" -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - lex-parser@0.1.x, lex-parser@~0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/lex-parser/-/lex-parser-0.1.4.tgz#64c4f025f17fd53bfb45763faeb16f015a747550" -lint-staged@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-4.3.0.tgz#ed0779ad9a42c0dc62bb3244e522870b41125879" - dependencies: - app-root-path "^2.0.0" - chalk "^2.1.0" - commander "^2.11.0" - cosmiconfig "^1.1.0" - execa "^0.8.0" - is-glob "^4.0.0" - jest-validate "^21.1.0" - listr "^0.12.0" - lodash "^4.17.4" - log-symbols "^2.0.0" - minimatch "^3.0.0" - npm-which "^3.0.1" - p-map "^1.1.1" - staged-git-files "0.0.4" - stringify-object "^3.2.0" - -listr-silent-renderer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" - -listr-update-renderer@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz#ca80e1779b4e70266807e8eed1ad6abe398550f9" - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^1.0.2" - strip-ansi "^3.0.1" - -listr-verbose-renderer@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35" - dependencies: - chalk "^1.1.3" - cli-cursor "^1.0.2" - date-fns "^1.27.2" - figures "^1.7.0" - -listr@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/listr/-/listr-0.12.0.tgz#6bce2c0f5603fa49580ea17cd6a00cc0e5fa451a" - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - figures "^1.7.0" - indent-string "^2.1.0" - is-promise "^2.1.0" - is-stream "^1.1.0" - listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.2.0" - listr-verbose-renderer "^0.4.0" - log-symbols "^1.0.2" - log-update "^1.0.2" - ora "^0.2.3" - p-map "^1.1.1" - rxjs "^5.0.0-beta.11" - stream-to-observable "^0.1.0" - strip-ansi "^3.0.1" - lodash.some@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" @@ -1406,25 +1142,6 @@ lodash@^4.14.0, lodash@^4.17.4: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" -log-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - dependencies: - chalk "^1.0.0" - -log-symbols@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.1.0.tgz#f35fa60e278832b538dc4dddcbb478a45d3e3be6" - dependencies: - chalk "^2.0.1" - -log-update@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" - dependencies: - ansi-escapes "^1.0.0" - cli-cursor "^1.0.2" - long@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" @@ -1435,13 +1152,6 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0" -lru-cache@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - micromatch@^2.1.5: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" @@ -1555,6 +1265,13 @@ nan@^2.3.0: version "2.7.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" +needle@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.0.1.tgz#c21fc961ce3c340fb082250da6a08a32f38631f1" + dependencies: + debug "^2.1.2" + iconv-lite "^0.4.4" + node-config@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/node-config/-/node-config-0.0.2.tgz#46b40dcfbcb0e66d46a15f81b54eac2130fb150d" @@ -1598,26 +1315,6 @@ normalize-path@^2.0.0, normalize-path@^2.0.1: dependencies: remove-trailing-separator "^1.0.1" -npm-path@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.3.tgz#15cff4e1c89a38da77f56f6055b24f975dfb2bbe" - dependencies: - which "^1.2.10" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - dependencies: - path-key "^2.0.0" - -npm-which@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" - dependencies: - commander "^2.9.0" - npm-path "^2.0.2" - which "^1.2.10" - npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" @@ -1639,7 +1336,7 @@ oauth-sign@~0.8.1, oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" -object-assign@^4.0.1, object-assign@^4.1.0: +object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -1656,20 +1353,7 @@ once@^1.3.0, once@^1.3.3: dependencies: wrappy "1" -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - -ora@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" - dependencies: - chalk "^1.1.1" - cli-cursor "^1.0.2" - cli-spinners "^0.1.2" - object-assign "^4.0.1" - -os-homedir@1.0.2, os-homedir@^1.0.0, os-homedir@^1.0.1: +os-homedir@1.0.2, os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -1692,14 +1376,6 @@ output-file-sync@^1.1.2: mkdirp "^0.5.1" object-assign "^4.1.0" -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - -p-map@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -1709,20 +1385,10 @@ parse-glob@^3.0.4: is-extglob "^1.0.0" is-glob "^2.0.0" -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - dependencies: - error-ex "^1.2.0" - path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-key@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" @@ -1731,16 +1397,6 @@ performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" @@ -1749,13 +1405,6 @@ prettier@1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.8.1.tgz#91064d778c08c85ac1cbe6b23195c34310d039f9" -pretty-format@^21.2.1: - version "21.2.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-21.2.1.tgz#ae5407f3cf21066cd011aa1ba5fce7b6a2eddb36" - dependencies: - ansi-regex "^3.0.0" - ansi-styles "^3.2.0" - prism-media@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/prism-media/-/prism-media-0.0.1.tgz#a3425c9cabd50d1c6c02e543941a11895667bd10" @@ -1768,10 +1417,6 @@ process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" @@ -1923,10 +1568,6 @@ request@^2.83.0: tunnel-agent "^0.6.0" uuid "^3.1.0" -require-from-string@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" - require_optional@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e" @@ -1938,25 +1579,12 @@ resolve-from@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" -restore-cursor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" - dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" - rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: glob "^7.0.5" -rxjs@^5.0.0-beta.11: - version "5.5.2" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.2.tgz#28d403f0071121967f18ad665563255d54236ac3" - dependencies: - symbol-observable "^1.0.1" - safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" @@ -1973,16 +1601,6 @@ set-immediate-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - signal-exit@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -1991,10 +1609,6 @@ slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - sliced@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/sliced/-/sliced-0.0.5.tgz#5edc044ca4eb6f7816d50ba2fc63e25d8fe4707f" @@ -2033,10 +1647,6 @@ source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - sshpk@^1.7.0: version "1.13.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" @@ -2051,20 +1661,12 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" -staged-git-files@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35" - static-eval@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-0.2.3.tgz#023f17ac9fee426ea788c12ea39206dc175f8b2a" dependencies: escodegen "~0.0.24" -stream-to-observable@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe" - string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -2079,14 +1681,6 @@ string_decoder@~1.0.0, string_decoder@~1.0.3: dependencies: safe-buffer "~5.1.0" -stringify-object@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.2.1.tgz#2720c2eff940854c819f6ee252aaeb581f30624d" - dependencies: - get-own-enumerable-property-symbols "^2.0.1" - is-obj "^1.0.1" - is-regexp "^1.0.0" - stringstream@~0.0.4, stringstream@~0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -2097,10 +1691,6 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - strip-indent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" @@ -2113,16 +1703,6 @@ supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" -supports-color@^4.0.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" - dependencies: - has-flag "^2.0.0" - -symbol-observable@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" - tar-pack@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" @@ -2164,6 +1744,10 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" +tunnel@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.2.tgz#f23bcd8b7a7b8a864261b2084f66f93193396334" + tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" @@ -2214,11 +1798,11 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -which@^1.2.10, which@^1.2.9: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" +wget@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/wget/-/wget-0.0.1.tgz#8bb81af0b8e60b5df262d3c81e5737e1f4931e53" dependencies: - isexe "^2.0.0" + tunnel "0.0.2" wide-align@^1.1.0: version "1.1.2" @@ -2237,7 +1821,3 @@ ws@^3.1.0: async-limiter "~1.0.0" safe-buffer "~5.1.0" ultron "~1.1.0" - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"