rocketleaguetrackerapi
Version:
RocketLeagueTrackerAPI
223 lines (222 loc) • 9.3 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
// Imports
const canvas_1 = require("canvas");
const fs = __importStar(require("fs"));
const request = __importStar(require("request"));
const webp = __importStar(require("webp-converter"));
const fetchmaster_1 = require("fetchmaster");
(0, canvas_1.registerFont)("./node_modules/rocketleaguetrackerapi/font.ttf", { family: "Cooper Heiwitt" });
if (!fs.existsSync("./node_modules/rocketleaguetrackerapi/src/temp")) {
fs.mkdirSync("./node_modules/rocketleaguetrackerapi/src/temp");
}
/**
* Utility class, not meant to be used
*/
class Platform {
constructor(nameIn) {
this.name = nameIn;
}
}
class RankData {
constructor(rankname, elo, icon) {
this.elo = elo;
this.rankname = rankname;
this.icon = icon;
}
}
/**
* User class, contains info of the given player
*/
class RLUser {
/**
*
* @param {Platform} platform - User's platform (see below)
* @param {string} username - User's name
*/
constructor(platform, username) {
this.username = username;
this.platformname = platform.name;
this.link = `https://api.tracker.gg/api/v2/rocket-league/standard/profile/${platform.name}/${username}`;
this.refreshData();
}
/**
* Refreshes the User's data, called when creating the RLUser object
*/
refreshData() {
return __awaiter(this, void 0, void 0, function* () {
let str = (yield (0, fetchmaster_1.get)(this.link)).replace("undefined:1", "").replace("</pre>", "").replace("<pre>", "");
this.data = JSON.parse(str).data;
});
}
/**
* Returns the User's raw data
* @returns {Map}
*/
getData() {
return __awaiter(this, void 0, void 0, function* () {
if (this.data == undefined || this.data == null) {
return JSON.parse((yield (0, fetchmaster_1.get)(this.link)).replace("undefined:1", "").replace("</pre>", "").replace("<pre>", "")).data;
}
else
return this.data;
});
}
/**
* Returns a given ranking's infos (Rank name, elo, iconUrl)
* @param {number} id - Rank's ID on the array (must be an integer)
* @returns {RankData}
*/
getRankData(id) {
return __awaiter(this, void 0, void 0, function* () {
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
const data = yield this.getData();
try {
let rankName = data["segments"][id]["stats"]["tier"]["metadata"]["name"];
let heloValue = data["segments"][id]["stats"]["rating"]["value"];
let imgUrl = data["segments"][id]["stats"]["tier"]["metadata"]["iconUrl"];
resolve(new RankData(rankName, heloValue, imgUrl));
}
catch (_a) {
resolve(new RankData("Unranked", 0, "https://trackercdn.com/cdn/tracker.gg/rocket-league/ranks/s4-0.png"));
}
}));
});
}
/**
* Returns the One versus One ranking's infos (Rank name, elo, iconUrl)
* @returns {RankData}
*/
getOneVersusOne() {
return __awaiter(this, void 0, void 0, function* () {
return yield this.getRankData(2);
});
}
/**
* Returns the Two versus Two ranking's infos (Rank name, elo, iconUrl)
* @returns {RankData}
*/
getTwoVersusTwo() {
return __awaiter(this, void 0, void 0, function* () {
return yield this.getRankData(3);
});
}
/**
* Returns the Three versus Three ranking's infos (Rank name, elo, iconUrl)
* @returns {RankData}
*/
getThreeVersusThree() {
return __awaiter(this, void 0, void 0, function* () {
return yield this.getRankData(4);
});
}
/**
* Returns a processed image as buffer
* @param {string} logoUrl - The user's avatar url
*/
getImage(logoUrl) {
return __awaiter(this, void 0, void 0, function* () {
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
const canvas = (0, canvas_1.createCanvas)(600, 240);
const ctx = canvas.getContext('2d');
let bg = yield (0, canvas_1.loadImage)("./node_modules/rocketleaguetrackerapi/src/canvas.png");
ctx.drawImage(bg, 0, 0, 600, 240);
if (logoUrl.endsWith("webp")) {
let filename = "./node_modules/rocketleaguetrackerapi/src/temp/" + uuidv4();
yield download(logoUrl, filename + ".webp");
yield webp.dwebp(filename + ".webp", filename + "-1.png", "-o");
let logo = yield (0, canvas_1.loadImage)(filename + "-1.png");
yield ctx.drawImage(logo, 16, 13, 126, 126);
yield fs.unlinkSync(filename + ".webp");
yield fs.unlinkSync(filename + "-1.png");
}
else {
let logo = yield (0, canvas_1.loadImage)(logoUrl);
ctx.drawImage(logo, 16, 13, 126, 126);
}
ctx.fillStyle = "#fff";
ctx.font = 'bold 20px "Cooper Heiwitt"';
const oneVone = yield this.getOneVersusOne();
const twoVtwo = yield this.getTwoVersusTwo();
const threeVthree = yield this.getThreeVersusThree();
let p1 = yield (0, canvas_1.loadImage)(oneVone.icon);
yield ctx.drawImage(p1, 168, 27, 50, 50);
ctx.fillText(oneVone["elo"].toString(), 448, 51);
let p2 = yield (0, canvas_1.loadImage)(twoVtwo.icon);
yield ctx.drawImage(p2, 168, 97, 50, 50);
ctx.fillText(twoVtwo["elo"].toString(), 492, 122);
let p3 = yield (0, canvas_1.loadImage)(threeVthree.icon);
yield ctx.drawImage(p3, 168, 169, 50, 50);
ctx.fillText(twoVtwo["elo"].toString(), 492, 122);
let bg2 = yield (0, canvas_1.loadImage)("./node_modules/rocketleaguetrackerapi/src/canvas2.png");
yield ctx.drawImage(bg2, 0, 0, 236, 240);
ctx.fillText(threeVthree["elo"].toString(), 504, 198);
const buffer = yield canvas.toBuffer("image/jpeg");
resolve(buffer);
}));
});
}
}
/**
* Utilitary function to download files
* @param {string} uri
* @param {string} filename
* @returns {Boolean}
*/
var download = function (uri, filename) {
return new Promise((resolve, rej) => {
request.head(uri, function (err, res, body) {
request.default(uri).pipe(fs.createWriteStream(filename)).on('close', () => {
resolve(true);
});
});
});
};
/**
* Returns a randomly generated UUIDv4 string
* @returns {string}
*/
function uuidv4() {
var dt = new Date().getTime();
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = (dt + Math.random() * 16) % 16 | 0;
dt = Math.floor(dt / 16);
return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
});
}
module.exports = {
RLUser,
Platform,
PlaystationNetwork: new Platform("psn"),
XboxLive: new Platform("xbl"),
Epic: new Platform("epic"),
Steam: new Platform("steam")
};