const MinecraftServerListPing = require("minecraft-status").MinecraftServerListPing; // Use `dns` to resolve the SRV record for minecraft servers const dns = require("dns"); const { hostname } = require("os"); const checkSrv = (hostname) => { hostname = `_minecraft._tcp.${hostname}`; return new Promise((resolve, reject) => { dns.resolveSrv(hostname, (err, addresses) => { if (err) { return reject(err); } if (!addresses || addresses.length <= 0) return reject("No SRV record found."); resolve(addresses[0]); }); }); } const findMc = (address, timeout) => { if (!timeout) timeout = 5000; return new Promise((resolve, reject) => { // First, if theres a port, if there is, use that if (address.includes(":")) { const [host, port] = address.split(":"); start = Date.now(); MinecraftServerListPing.ping(4, host, port, timeout).then((data) => { end = Date.now(); data.ping = end - start; resolve(data); }).catch((err) => { reject(err); }); } else { // No SRV record, try to ping the address on port 25565 start = Date.now(); MinecraftServerListPing.ping(4, address, 25565, timeout).then((data) => { end = Date.now(); data.ping = end - start; resolve(data); }).catch((err) => { // Not a port, first try to resolve an SRV record checkSrv(address).then((addr) => { start = Date.now(); MinecraftServerListPing.ping(4, addr.name, addr.port, timeout).then((data) => { end = Date.now(); data.ping = end - start; resolve(data); }).catch((err) => { reject(err); }); }).catch((err) => { reject(err); }) }); } }) } module.exports = findMc;