minecraft-server-data
Version:
A simple MCApi wrapper written in JavaScript.
65 lines (59 loc) • 1.65 kB
JavaScript
/**
* @param {string} ip
* @param { int | string } port
* @returns {Promise<Object>}
*/
module.exports = (ip, port = 25565) => {
return new Promise((resolve, reject) => {
if (typeof ip !== "string") {
return reject("IP must be a string.")
}
port = parseInt(port);
if (port > 65535) {
return reject("Port must me lower than 65535.")
}
request(`https://mcapi.us/server/status?ip=${ip}&port=${port}`)
.then(result => handleResolve(result, resolve, reject))
.catch(reject)
}
)
};
/**
* @param data { Object }
* @param resolve { function }
* @param reject { function }
* @returns { * }
*/
handleResolve = (data, resolve, reject) => {
if (data.status !== "success" || data.error) {
return reject(data.error || "An error occured.")
}
delete data.status;
delete data.error;
data.queryDuration = data.duration * 0.000001; // Getting milliseconds from nanoseconds
data.server.version = data.server.name;
delete data.server.name;
delete data.duration;
resolve(data)
};
/**
* Using axios or request is for losers.
* @param url { String }
* @returns { Promise<Object> }
*/
request = (url) => {
return new Promise((resolve, reject) => {
require("https").get(url, res => {
if (res.statusCode !== 200) {
reject("Request failed.");
}
res.on("data", d => {
resolve(JSON.parse(d.toString()))
})
}).on("error", e => {
reject(`An error occured: ${e}`)
}).end()
})
};
// I want to thank Syfaro for letting his MCApi free and easy-to-use.
// © 2020 Edouard Courty - MIT License