UNPKG

r6s-stats-api

Version:

An api for fetching player statistics from Rainbow Six Siege

269 lines (196 loc) 11.9 kB
const Stats = require('./src/stats/stats'); const Fetch = require('./src/fetch'); const rankImg = require('./src/fetch/modules/rankimg'); const checkPlatform = require('./src/fetch/modules/checkplatform'); const checkNumber = require('./src/fetch/modules/checknumber'); let stats_general = new Stats.dataGeneral(); let stats_casual = new Stats.dataCasual(); let stats_rank = new Stats.dataRank(); // let stats_unrank = new Stats.dataUnrank(); // Deprecated unrank. let stats_deathmatch = new Stats.dataDeathmatch(); let stats_operator = new Stats.dataOperator(); const API_ERROR = `If you see this error, it means it's an API error, please report this error on Github.`; module.exports = { general: async function (platform, name) { if (typeof platform !== 'string' || typeof name !== 'string') return 'FORMAT_ERROR'; if (!checkPlatform(platform.toLowerCase())) return 'PLATFORM_ERROR'; let url = `https://r6.tracker.network/profile/${platform.toLowerCase()}/${name}/`; let track = await Fetch.general(url); if (track[0] === 'error') return 'NOT_FOUND'; if (track[0] === 'timeout') return 'TIME_OUT'; let header = track[0]; let level = track[1]; let profile = track[2]; //console.log(track); if (typeof (profile) === 'undefined') throw new Error(API_ERROR); stats_general.url = url; stats_general.name = name; stats_general.header = header; stats_general.level = level[level.indexOf('Level') + 1]; stats_general.kd = checkNumber(profile[profile.indexOf('KD') + 1]); stats_general.kills = checkNumber(level[level.indexOf('Kills') + 1]); stats_general.deaths = checkNumber(profile[profile.indexOf('Deaths') + 1]); stats_general.win_ = profile[profile.indexOf('Win %') + 1]; stats_general.wins = checkNumber(profile[profile.indexOf('Wins') + 1]); stats_general.losses = checkNumber(profile[profile.indexOf('Losses') + 1]); stats_general.headshot_ = profile[profile.indexOf('Headshot %') + 1]; stats_general.headshots = checkNumber(profile[profile.indexOf('Headshots') + 1]); stats_general.time_played = profile[profile.indexOf('Time Played') + 1]; stats_general.matches_played = checkNumber(profile[profile.indexOf('Matches Played') + 1]); stats_general.total_xp = profile[profile.indexOf('Total XP') + 1]; stats_general.melee_kills = checkNumber(profile[profile.indexOf('Melee Kills') + 1]); stats_general.blind_kills = checkNumber(profile[profile.indexOf('Blind Kills') + 1]); return stats_general; }, casual: async function (platform, name) { if (typeof platform !== 'string' || typeof name !== 'string') return 'FORMAT_ERROR'; if (!checkPlatform(platform.toLowerCase())) return 'PLATFORM_ERROR'; let url = `https://r6.tracker.network/profile/${platform.toLowerCase()}/${name}/`; let track = await Fetch.casual(url); if (track[0] === 'error') return 'NOT_FOUND'; if (track[0] === 'timeout') return 'TIME_OUT'; let header = track[0]; let rank = track[1]; let profile = track[2]; //console.log(track); if (typeof (profile) === 'undefined') throw new Error(API_ERROR); stats_casual.url = url; stats_casual.name = name; stats_casual.header = header; stats_casual.kd = checkNumber(profile[profile.indexOf('KD') + 1]); stats_casual.kills = checkNumber(profile[profile.indexOf('Kills') + 1]); stats_casual.deaths = checkNumber(profile[profile.indexOf('Deaths') + 1]); stats_casual.win_ = profile[profile.indexOf('Win %') + 1]; stats_casual.wins = checkNumber(profile[profile.indexOf('Wins') + 1]); stats_casual.losses = checkNumber(profile[profile.indexOf('Losses') + 1]); stats_casual.time_played = profile[profile.indexOf('Time Played') + 1]; stats_casual.matches = checkNumber(profile[profile.indexOf('Matches') + 1]); stats_casual.kills_match = checkNumber(profile[profile.indexOf('Kills/match') + 1]); stats_casual.kills_min = checkNumber(profile[profile.indexOf('Kills/min') + 1]); stats_casual.mmr = typeof (rank?.indexOf('Rank Points')) === 'undefined' ? '0' : checkNumber(rank[rank.indexOf('Rank Points') + 1]); stats_casual.rank = typeof (rank?.indexOf('Rank')) === 'undefined' ? 'UNRANKED' : rank[rank.indexOf('Rank') + 1]; stats_casual.rank_img = rankImg(stats_casual.rank); return stats_casual; }, rank: async function (platform, name) { if (typeof platform !== 'string' || typeof name !== 'string') return 'FORMAT_ERROR'; if (!checkPlatform(platform.toLowerCase())) return 'PLATFORM_ERROR'; let url = `https://r6.tracker.network/profile/${platform.toLowerCase()}/${name}/`; let track = await Fetch.rank(url); if (track[0] === 'error') return 'NOT_FOUND'; if (track[0] === 'timeout') return 'TIME_OUT'; let header = track[0]; let rank = track[1]; let profile = track[2]; //console.log(track); if (typeof (profile) === 'undefined') throw new Error(API_ERROR); stats_rank.url = url; stats_rank.name = name; stats_rank.header = header; stats_rank.kd = checkNumber(profile[profile.indexOf('KD') + 1]); stats_rank.kills = checkNumber(profile[profile.indexOf('Kills') + 1]); stats_rank.deaths = checkNumber(profile[profile.indexOf('Deaths') + 1]); stats_rank.win_ = profile[profile.indexOf('Win %') + 1]; stats_rank.wins = checkNumber(profile[profile.indexOf('Wins') + 1]); stats_rank.losses = checkNumber(profile[profile.indexOf('Losses') + 1]); stats_rank.time_played = profile[profile.indexOf('Time Played') + 1]; stats_rank.matches = checkNumber(profile[profile.indexOf('Matches') + 1]); stats_rank.kills_match = checkNumber(profile[profile.indexOf('Kills/match') + 1]); stats_rank.kills_min = checkNumber(profile[profile.indexOf('Kills/min') + 1]); stats_rank.mmr = typeof (rank?.indexOf('Rank Points')) === 'undefined' ? '0' : rank[rank.indexOf('Rank Points') + 1]; stats_rank.rank = typeof (rank?.indexOf('Rank')) === 'undefined' ? 'UNRANKED' : rank[rank.indexOf('Rank') + 1]; stats_rank.rank_img = rankImg(stats_rank.rank); return stats_rank; }, /* Deprecated unrank. unrank: async function (platform, name) { if (typeof (platform) !== "string" || typeof (name) !== "string") return "FORMAT_ERROR"; if (!chechPlatform(platform.toLowerCase())) return "PLATFORM_ERROR"; let url = `https://r6.tracker.network/profile/${platform.toLowerCase()}/${name}/`; let track = await Fetch.unrank(url); if (track[0] === "error") return "NOT_FOUND"; if (track[0] === "timeout") return "TIME_OUT"; let header = track[0]; let profile = track[1]; //console.log(track); stats_unrank.url = url; stats_unrank.name = name; stats_unrank.header = header; stats_unrank.kd = profile[profile.indexOf('KD') + 1]; stats_unrank.kills = profile[profile.indexOf('Kills') + 1]; stats_unrank.deaths = profile[profile.indexOf('Deaths') + 1]; stats_unrank.win_ = profile[profile.indexOf('Win %') + 1]; stats_unrank.wins = profile[profile.indexOf('Wins') + 1]; stats_unrank.losses = profile[profile.indexOf('Losses') + 1]; stats_unrank.time_played = profile[profile.indexOf('Time Played') + 1]; stats_unrank.matches = profile[profile.indexOf('Matches') + 1]; stats_unrank.kills_match = profile[profile.indexOf('Kills/match') + 1]; stats_unrank.kills_min = profile[profile.indexOf('Kills/min') + 1]; return stats_unrank; }, */ deathmatch: async function (platform, name) { if (typeof platform !== 'string' || typeof name !== 'string') return 'FORMAT_ERROR'; if (!checkPlatform(platform.toLowerCase())) return 'PLATFORM_ERROR'; let url = `https://r6.tracker.network/profile/${platform.toLowerCase()}/${name}/`; let track = await Fetch.deathmatch(url); if (track[0] === 'error') return 'NOT_FOUND'; if (track[0] === 'timeout') return 'TIME_OUT'; let header = track[0]; let rank = track[1]; let profile = track[1]; //console.log(track); if (typeof (profile) === 'undefined') return 'NEVER_PLAY'; stats_deathmatch.url = url; stats_deathmatch.name = name; stats_deathmatch.header = header; stats_deathmatch.kd = checkNumber(profile[profile.indexOf('K/D') + 1]); stats_deathmatch.kills = checkNumber(profile[profile.indexOf('Kills') + 1]); stats_deathmatch.deaths = checkNumber(profile[profile.indexOf('Deaths') + 1]); stats_deathmatch.win_ = profile[profile.indexOf('Win %') + 1]; stats_deathmatch.wins = checkNumber(profile[profile.indexOf('Wins') + 1]); stats_deathmatch.losses = checkNumber(profile[profile.indexOf('Losses') + 1]); stats_deathmatch.abandons = checkNumber(profile[profile.indexOf('Abandons') + 1]); stats_deathmatch.matches = String(parseInt(stats_deathmatch.wins) + parseInt(stats_deathmatch.losses) + parseInt(stats_deathmatch.abandons)); stats_deathmatch.kills_match = checkNumber(profile[profile.indexOf('Kills/Match') + 1]); stats_deathmatch.mmr = typeof (rank?.indexOf('Rank Points')) === 'undefined' ? '0' : checkNumber(rank[rank.indexOf('Rank Points') + 1]); stats_deathmatch.rank = typeof (rank?.indexOf('Rank')) === 'undefined' ? 'UNRANKED' : rank[rank.indexOf('Rank') + 1]; stats_deathmatch.rank_img = rankImg(stats_deathmatch.rank); return stats_deathmatch; }, operator: async function (platform, name, operator) { if (typeof platform !== 'string' || typeof name !== 'string') return 'FORMAT_ERROR'; if (!checkPlatform(platform.toLowerCase())) return 'PLATFORM_ERROR'; let url = `https://r6.tracker.network/profile/${platform.toLowerCase()}/${name}/operators`; let track = await Fetch.operator(url, operator.toUpperCase()); if (track[0] === 'error') return 'NOT_FOUND'; if (track[0] === 'timeout') return 'TIME_OUT'; if (track[0] === 'operator_error') return 'OPERATOR_ERROR'; let header = track[0]; let operator_img = track[1]; let board = track[2]; let profile = track[3]; //console.log(track); if (typeof (profile) === 'undefined') throw new Error(API_ERROR); stats_operator.url = url; stats_operator.name = name; stats_operator.header = header; stats_operator.operator = profile[board.indexOf('Operator ')]; stats_operator.kd = checkNumber(profile[board.indexOf('K/D')]); stats_operator.kills = checkNumber(profile[board.indexOf('Kills')]); stats_operator.deaths = checkNumber(profile[board.indexOf('Deaths')]); stats_operator.win_ = profile[board.indexOf('Win %')]; stats_operator.wins = checkNumber(profile[board.indexOf('Wins')]); stats_operator.losses = checkNumber(profile[board.indexOf('Losses')]); stats_operator.headshots_ = profile[board.indexOf('Headshot %')]; stats_operator.time_played = profile[board.indexOf('Time Played')]; stats_operator.dbnos = profile[board.indexOf('DBNOs')]; stats_operator.xp = profile[board.indexOf('XP')]; stats_operator.melee_kills = checkNumber(profile[board.indexOf('Melee Kills')]); stats_operator.operator_stat = profile[board.indexOf('Operator Stat')]; stats_operator.operator_img = operator_img; return stats_operator; }, };