lbry-wunderbot/bot/modules/stats.js
2017-11-17 22:47:17 +01:00

169 lines
6.2 KiB
JavaScript

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;
let statsurl = "https://coinmarketcap.com/currencies/library-credit/";
exports.commands = [
"stats" // command that is in this file, every command needs it own export as shown below
];
exports.stats = {
usage: "",
description: "Displays list of current Market stats",
process: function(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 {
var data = response.body[0];
var rank = data.rank;
var price_usd = Number(data.price_usd);
var price_btc = Number(data.price_btc);
var market_cap_usd = Number(data.market_cap_usd);
var available_supply = Number(data.available_supply);
var total_supply = Number(data.total_supply);
var percent_change_1h = Number(data.percent_change_1h);
var percent_change_24h = Number(data.percent_change_24h);
var json = response.body[0];
var newjson = parse_obj(json);
var parse = JSON.stringify(newjson);
var volume24_usd = parse.replace(/[^0-9]/g, "");
var dt = new Date();
var timestamp = dt.toUTCString();
var hr_indicator = ":thumbsup:";
var day_indicator = ":thumbsup:";
if (percent_change_1h < 0) {
hr_indicator = ":thumbsdown:";
}
if (percent_change_24h < 0) {
day_indicator = ":thumbsdown:";
}
needle.get(
"https://api.coinmarketcap.com/v1/ticker/library-credit/?convert=GBP",
function(error, response) {
if (error || response.statusCode !== 200) {
msg.channel.send("coinmarketcap API is not available");
} else {
var data = response.body[0];
var price_gbp = Number(data.price_gbp);
needle.get(
"https://api.coinmarketcap.com/v1/ticker/library-credit/?convert=EUR",
function(error, response) {
if (error || response.statusCode !== 200) {
msg.channel.send("coinmarketcap API is not available");
} else {
var data = response.body[0];
var price_eur = Number(data.price_eur);
description =
"**Rank: [" +
rank +
"](" +
statsurl +
")**\n" +
"**Data**\n" +
"Market Cap: [$" +
numberWithCommas(market_cap_usd) +
"](" +
statsurl +
") \n" +
"Total Supply: [" +
numberWithCommas(total_supply) +
" LBC](" +
statsurl +
")\n" +
"Circulating Supply: [" +
numberWithCommas(available_supply) +
" LBC](" +
statsurl +
")\n" +
"24 Hour Volume: [$" +
volume24_usd +
"](" +
statsurl +
") \n\n" +
"**Price**\n" +
"BTC: [₿" +
price_btc.toFixed(8) +
"](" +
statsurl +
")\n" +
"USD: [$" +
price_usd.toFixed(2) +
"](" +
statsurl +
") \n" +
"EUR: [€" +
price_eur.toFixed(2) +
"](" +
statsurl +
") \n" +
"GBP: [£" +
price_gbp.toFixed(2) +
"](" +
statsurl +
") \n\n" +
"**% Change**\n" +
"1 Hour: [" +
percent_change_1h +
"](" +
statsurl +
") " +
hr_indicator +
" \n\n" +
"1 Day: [" +
percent_change_24h +
"](" +
statsurl +
") " +
day_indicator +
" \n\n";
const embed = {
description: description,
color: 7976557,
footer: {
text: "Last Updated: " + timestamp
},
author: {
name: "Coin Market Cap Stats (LBC)",
url: statsurl,
icon_url: "https://i.imgur.com/yWf5USu.png"
}
};
msg.channel.send({ embed });
}
}
);
}
}
);
}
}
);
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;
}
}
return array;
}
function numberWithCommas(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
}
};