mirror of
https://github.com/RYGhub/royalnet.git
synced 2024-11-23 11:34:18 +00:00
Royalprint: Mcstatus (#72)
This commit is contained in:
parent
eb028d620b
commit
7331619d6d
8 changed files with 188 additions and 3 deletions
|
@ -15,3 +15,4 @@ PyNaCl>=1.3.0
|
|||
werkzeug>=0.15.4
|
||||
flask>=1.0.3
|
||||
markdown2>=2.3.8
|
||||
mcstatus>=2.2.1
|
||||
|
|
|
@ -8,7 +8,7 @@ class TestConfig:
|
|||
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__":
|
||||
|
|
|
@ -5,5 +5,6 @@ from .wikiview import rp as rp_wikiview
|
|||
from .tglogin import rp as rp_tglogin
|
||||
from .docs import rp as rp_docs
|
||||
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"]
|
||||
|
|
29
royalnet/web/royalprints/mcstatus/__init__.py
Normal file
29
royalnet/web/royalprints/mcstatus/__init__.py
Normal 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)
|
54
royalnet/web/royalprints/mcstatus/templates/mcstatus.html
Normal file
54
royalnet/web/royalprints/mcstatus/templates/mcstatus.html
Normal 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 %}
|
|
@ -513,4 +513,48 @@ button[disabled=""] {
|
|||
.wikiedit-form .CodeMirror .cm-header {
|
||||
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 */
|
File diff suppressed because one or more lines are too long
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue