1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-27 13:34:28 +00:00

Royalprint: Mcstatus (#72)

This commit is contained in:
Steffo 2019-06-22 16:54:40 +02:00 committed by GitHub
parent eb028d620b
commit 7331619d6d
Signed by: github
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 188 additions and 3 deletions

View file

@ -15,3 +15,4 @@ PyNaCl>=1.3.0
werkzeug>=0.15.4 werkzeug>=0.15.4
flask>=1.0.3 flask>=1.0.3
markdown2>=2.3.8 markdown2>=2.3.8
mcstatus>=2.2.1

View file

@ -8,7 +8,7 @@ class TestConfig:
TG_AK = os.environ["TG_AK"] TG_AK = os.environ["TG_AK"]
app = create_app(TestConfig, [rp_home, rp_wikiview, rp_tglogin, rp_docs, rp_wikiedit]) app = create_app(TestConfig, [rp_home, rp_wikiview, rp_tglogin, rp_docs, rp_wikiedit, rp_mcstatus])
if __name__ == "__main__": if __name__ == "__main__":

View file

@ -5,5 +5,6 @@ from .wikiview import rp as rp_wikiview
from .tglogin import rp as rp_tglogin from .tglogin import rp as rp_tglogin
from .docs import rp as rp_docs from .docs import rp as rp_docs
from .wikiedit import rp as rp_wikiedit from .wikiedit import rp as rp_wikiedit
from .mcstatus import rp as rp_mcstatus
__all__ = ["rp_home", "rp_wikiview", "rp_tglogin", "rp_docs", "rp_wikiedit"] __all__ = ["rp_home", "rp_wikiview", "rp_tglogin", "rp_docs", "rp_wikiedit", "rp_mcstatus"]

View file

@ -0,0 +1,29 @@
"""Minecraft server status :py:class:`royalnet.web.Royalprint`."""
import os
import flask as f
import socket
from ... import Royalprint
from mcstatus import MinecraftServer
tmpl_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'templates')
rp = Royalprint("mcstatus", __name__, url_prefix="/mcstatus", template_folder=tmpl_dir)
@rp.route("/<server_str>")
def mcstatus_index(server_str: str):
try:
if ":" not in server_str:
server_str += ":25565"
server = MinecraftServer.lookup(server_str)
status = server.status()
try:
query = server.query()
except (socket.timeout, ConnectionRefusedError, OSError):
query = None
except socket.gaierror:
return "No such address", 404
except (socket.timeout, ConnectionRefusedError, OSError):
status = None
query = None
return f.render_template("mcstatus.html", server_str=server_str, status=status, query=query)

View file

@ -0,0 +1,54 @@
{% extends "base.html" %}
{% block title %}
{{ server_str }} - RYG MCstatus
{% endblock %}
{% block content %}
<div class="doublebox">
<div class="top">
<span class="left">Minecraft Status</span>
</div>
<div class="bot">
<div class="mcstatus-grid">
{% if query %}
{% if status.favicon %}
<div class="mcstatus-icon"><img class="mcstatus-icon-img" src="{{ status.favicon }}" alt="Server icon"></div>
{% else %}
<div class="mcstatus-icon"><div class="mcstatus-icon-img" title="Server icon"></div></div>
{% endif %}
<div class="mcstatus-address"><span class="server-up">{{ server_str }}</span></div>
<div class="mcstatus-description"><span>{{ query.motd }}</span></div>
<div class="mcstatus-players"><span>{{ query.players.online }}</span>/<span>{{ query.players.max }}</span></div>
<div class="mcstatus-version"><span>{{ query.software.brand }}</span> <span>{{ query.software.version }}</span> (<span>{{ status.version.protocol }}</span>)</div>
{% elif status %}
{% if status.favicon %}
<div class="mcstatus-icon"><img class="mcstatus-icon-img" src="{{ status.favicon }}" alt="Server icon"></div>
{% else %}
<div class="mcstatus-icon"><div class="mcstatus-icon-img" title="Server icon"></div></div>
{% endif %}
<div class="mcstatus-address"><span class="server-up">{{ server_str }}</span></div>
<div class="mcstatus-description"><span>{{ status.description }}</span></div>
<div class="mcstatus-players"><span>{{ status.players.online }}</span>/<span>{{ status.players.max }}</span></div>
<div class="mcstatus-version"><span>{{ status.version.name }}</span> (<span>{{ status.version.protocol }}</span>)</div>
{% else %}
<div class="mcstatus-icon"><div class="mcstatus-icon-img" title="Server icon"></div></div>
<div class="mcstatus-address"><span class="server-down">{{ server_str }}</span></div>
<div class="mcstatus-description"><span>-</span></div>
<div class="mcstatus-players"><span>0</span>/<span>0</span></div>
<div class="mcstatus-version"><span>Offline</span> (<span>-</span>)</div>
{% endif %}
</div>
{% if query %}
<div class="mcstatus-playerlist">
<h3>Giocatori connessi:</h3>
<ul>
{% for player in query.players.names %}
<li>{{ player }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
</div>
</div>
{% endblock %}

View file

@ -513,4 +513,48 @@ button[disabled=""] {
.wikiedit-form .CodeMirror .cm-header { .wikiedit-form .CodeMirror .cm-header {
color: #ffffff !important; color: #ffffff !important;
} }
.mcstatus-grid {
display: grid;
grid-template-columns: 64px auto auto;
grid-column-gap: 12px;
align-items: center;
}
.mcstatus-grid .mcstatus-icon {
grid-column: 1;
grid-row-start: 1;
grid-row-end: 3;
width: 64px;
height: 64px;
}
.mcstatus-grid .mcstatus-icon .mcstatus-icon-img {
width: 64px;
height: 64px;
}
.mcstatus-grid .mcstatus-address {
font-weight: bold;
grid-column: 2;
justify-self: start;
grid-row: 1;
}
.mcstatus-grid .mcstatus-address .server-up {
color: #7dff7d;
}
.mcstatus-grid .mcstatus-address .server-down {
color: #ff7d7d;
}
.mcstatus-grid .mcstatus-description {
grid-column: 2;
justify-self: start;
grid-row: 2;
}
.mcstatus-grid .mcstatus-players {
grid-column: 3;
justify-self: end;
grid-row: 1;
}
.mcstatus-grid .mcstatus-version {
grid-column: 3;
justify-self: end;
grid-row: 2;
}
/*# sourceMappingURL=ryg.css.map */ /*# sourceMappingURL=ryg.css.map */

File diff suppressed because one or more lines are too long

View file

@ -621,3 +621,59 @@ nav {
} }
} }
.mcstatus-grid {
display: grid;
grid-template-columns: 64px auto auto;
grid-column-gap: 12px;
align-items: center;
.mcstatus-icon {
grid-column: 1;
grid-row-start: 1;
grid-row-end: 3;
width: 64px;
height: 64px;
.mcstatus-icon-img {
width: 64px;
height: 64px;
}
}
.mcstatus-address {
font-weight: bold;
grid-column: 2;
justify-self: start;
grid-row: 1;
.server-up {
color: @pastel-lime;
}
.server-down {
color: @pastel-red;
}
}
.mcstatus-description {
grid-column: 2;
justify-self: start;
grid-row: 2;
}
.mcstatus-players {
grid-column: 3;
justify-self: end;
grid-row: 1;
}
.mcstatus-version {
grid-column: 3;
justify-self: end;
grid-row: 2;
}
}