Skip to content

Instantly share code, notes, and snippets.

@piratjsk
Created June 27, 2018 09:28
Show Gist options
  • Select an option

  • Save piratjsk/24ef173dbea6fcfd5adef71dc85809ca to your computer and use it in GitHub Desktop.

Select an option

Save piratjsk/24ef173dbea6fcfd5adef71dc85809ca to your computer and use it in GitHub Desktop.
const refreshStatus = () => {
const servers = [
{
ip: 'SzesciennaKraina.PL',
version: '1.12.2',
discord: 'bhzDRdX',
ranks: [
/* support */ { members: [], style: 'bordersup' },
/* moderator */ { members: ['Nieznajomywwl', 'JakubQIKE', 'Slav00', 'Derty336'], style: 'bordermod' },
/* administrator */ { members: ['x__szuli__x'], style: 'borderadm' },
/* rcon */ { members: ['MisterPawlak', 'piotreee'], style: 'borderrcon' }
]
}
]
const statusPanel = document.getElementById("servers")
loadStatus(servers, statusPanel)
}
const loadStatus = (servers, statusPanel) => {
statusPanel.innerHTML = ''
servers.forEach(server => {
const serverPanel = statusPanel.appendChild(document.createElement("div"))
serverPanel.innerHTML = `<strong>IP:</strong> ${server.ip} <img src="http://szesciennakraina.pl/forum/images/spinner.gif">`
loadServerStatus(server, serverPanel)
})
}
const loadServerStatus = async (server, serverPanel) => {
const {ip, isOnline, version, players, ranks} = await getServerInfo(server)
let html = `<strong>IP:</strong> ${ip}<br>`
if (!isOnline) {
serverPanel.innerHTML = html + `<strong>Serwer jest wyłączony bądź połączenie z nim jest nieosiągalne.</strong>`
return
}
html += `<strong>Wersja:</strong> ${version}<br>` +
`<strong>Graczy online (${players.current}/${players.max}):</strong>` +
`<div class='players'>`
players.list.forEach(player => {
const rankStyle = getPlayerRankStyle(player, ranks, 'borderplr')
html += `<img class="avatarcircle ${rankStyle}" src="http://cravatar.eu/avatar/${player}/32.png" alt="${player}" title="${player}">`
})
html+=`</div>`
serverPanel.innerHTML = html
}
const getServerInfo = async (server) => {
try {
const response = await fetch(`https://api.mcsrvstat.us/1/${server.ip}`)
const json = await response.json()
console.log(json)
server.isOnline = json.debug.ping
server.players = {
current: json.players.online,
max: json.players.max,
list: json.players.list
}
} catch (err) {
server.isOnline = false
}
return server
}
const getPlayerRankStyle = (player, ranks, defaultStyle) => {
let style = defaultStyle
ranks.forEach(rank => {
if (rank.members.includes(player))
style = rank.style
})
return style
}
window.addEventListener('load', refreshStatus)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment