491 lines
19 KiB
Python
491 lines
19 KiB
Python
|
from typing import Optional
|
||
|
from fastapi import Body, FastAPI, Request
|
||
|
from loguru import logger
|
||
|
from discord_webhook import DiscordEmbed, DiscordWebhook
|
||
|
from os import getenv
|
||
|
app = FastAPI()
|
||
|
|
||
|
webhook_url = getenv("DYNMAP_WEBHOOK", None)
|
||
|
if webhook_url:
|
||
|
webhook = DiscordWebhook(url=webhook_url)
|
||
|
else:
|
||
|
webhook = None
|
||
|
|
||
|
@app.post("/up/sendmessage")
|
||
|
async def message_endpoint(request: Request, name: str = Body(str), message: str = Body(str)):
|
||
|
ip = request.headers['X-Forwarded-For']
|
||
|
if webhook:
|
||
|
embed = DiscordEmbed(
|
||
|
title="message received",
|
||
|
description="```" + (f"{name}: " if name != "" else "") + str(message) + "```",
|
||
|
)
|
||
|
embed.add_embed_field(name="address", value=ip)
|
||
|
webhook.add_embed(embed)
|
||
|
response = webhook.execute()
|
||
|
|
||
|
logger.info(f"new message from {ip}: [{name}] {message}")
|
||
|
return {"error": "none"}
|
||
|
|
||
|
|
||
|
@app.get("/up/configuration")
|
||
|
async def configuration_endpoint(request: Request):
|
||
|
ip = request.headers['X-Forwarded-For']
|
||
|
if webhook:
|
||
|
embed = DiscordEmbed(title="received configuration request")
|
||
|
embed.add_embed_field(name="address", value=ip)
|
||
|
response = webhook.execute()
|
||
|
|
||
|
# default configuration
|
||
|
# TODO: move to a separate file
|
||
|
return {
|
||
|
"updaterate": 2000.0,
|
||
|
"chatlengthlimit": 256,
|
||
|
"components": [
|
||
|
{
|
||
|
"spawnlabel": "Spawn",
|
||
|
"spawnbedhidebydefault": True,
|
||
|
"spawnbedformat": "%name%'s bed",
|
||
|
"worldborderlabel": "Border",
|
||
|
"spawnbedremoveonplayerleave": True,
|
||
|
"showworldborder": True,
|
||
|
"type": "markers",
|
||
|
"showlabel": False,
|
||
|
"offlineicon": "offlineuser",
|
||
|
"showspawnbeds": False,
|
||
|
"showofflineplayers": False,
|
||
|
"spawnbedicon": "bed",
|
||
|
"offlinehidebydefault": True,
|
||
|
"offlinelabel": "Offline",
|
||
|
"enablesigns": False,
|
||
|
"default-sign-set": "markers",
|
||
|
"spawnicon": "world",
|
||
|
"offlineminzoom": 0,
|
||
|
"spawnbedminzoom": 0,
|
||
|
"showspawn": True,
|
||
|
"spawnbedlabel": "Spawn Beds",
|
||
|
"maxofflinetime": 30,
|
||
|
},
|
||
|
{"allowurlname": False, "type": "chat"},
|
||
|
{"focuschatballoons": False, "type": "chatballoon"},
|
||
|
{
|
||
|
"showplayerfaces": True,
|
||
|
"sendbutton": False,
|
||
|
"type": "chatbox",
|
||
|
"messagettl": 5,
|
||
|
},
|
||
|
{
|
||
|
"hidebydefault": False,
|
||
|
"showplayerhealth": True,
|
||
|
"showplayerbody": False,
|
||
|
"showplayerfaces": True,
|
||
|
"largeplayerfaces": False,
|
||
|
"label": "Players",
|
||
|
"type": "playermarkers",
|
||
|
"smallplayerfaces": False,
|
||
|
"layerprio": 0,
|
||
|
},
|
||
|
{"type": "link"},
|
||
|
{"showdigitalclock": True, "showweather": True, "type": "timeofdayclock"},
|
||
|
{
|
||
|
"show-mcr": False,
|
||
|
"label": "Location",
|
||
|
"type": "coord",
|
||
|
"show-chunk": False,
|
||
|
"hidey": False,
|
||
|
},
|
||
|
],
|
||
|
"worlds": [
|
||
|
{
|
||
|
"sealevel": 63,
|
||
|
"protected": False,
|
||
|
"maps": [
|
||
|
{
|
||
|
"nightandday": False,
|
||
|
"shader": "stdtexture",
|
||
|
"compassview": "S",
|
||
|
"prefix": "flat",
|
||
|
"tilescale": 0,
|
||
|
"icon": None,
|
||
|
"scale": 4,
|
||
|
"azimuth": 270.0,
|
||
|
"type": "HDMapType",
|
||
|
"title": "Flat",
|
||
|
"backgroundday": None,
|
||
|
"protected": False,
|
||
|
"mapzoomout": 5,
|
||
|
"perspective": "iso_S_90_lowres",
|
||
|
"worldtomap": [
|
||
|
4.0,
|
||
|
0.0,
|
||
|
-2.4492935982947064e-16,
|
||
|
-2.4492935982947064e-16,
|
||
|
0.0,
|
||
|
-4.0,
|
||
|
0.0,
|
||
|
1.0,
|
||
|
0.0,
|
||
|
],
|
||
|
"inclination": 90.0,
|
||
|
"image-format": "jpg",
|
||
|
"lighting": "shadows",
|
||
|
"bigmap": True,
|
||
|
"maptoworld": [
|
||
|
0.25,
|
||
|
-1.5308084989341915e-17,
|
||
|
0.0,
|
||
|
0.0,
|
||
|
0.0,
|
||
|
1.0,
|
||
|
-1.5308084989341915e-17,
|
||
|
-0.25,
|
||
|
0.0,
|
||
|
],
|
||
|
"background": None,
|
||
|
"boostzoom": 0,
|
||
|
"name": "flat",
|
||
|
"backgroundnight": None,
|
||
|
"mapzoomin": 1,
|
||
|
},
|
||
|
{
|
||
|
"nightandday": False,
|
||
|
"shader": "stdtexture",
|
||
|
"compassview": "SE",
|
||
|
"prefix": "t",
|
||
|
"tilescale": 0,
|
||
|
"icon": None,
|
||
|
"scale": 16,
|
||
|
"azimuth": 225.0,
|
||
|
"type": "HDMapType",
|
||
|
"title": "Surface",
|
||
|
"backgroundday": None,
|
||
|
"protected": False,
|
||
|
"mapzoomout": 7,
|
||
|
"perspective": "iso_SE_30_hires",
|
||
|
"worldtomap": [
|
||
|
11.31370849898476,
|
||
|
0.0,
|
||
|
-11.313708498984761,
|
||
|
-5.6568542494923815,
|
||
|
13.856406460551018,
|
||
|
-5.656854249492381,
|
||
|
5.551115123125782e-17,
|
||
|
0.9999999999999997,
|
||
|
5.551115123125782e-17,
|
||
|
],
|
||
|
"inclination": 30.0,
|
||
|
"image-format": "jpg",
|
||
|
"lighting": "shadows",
|
||
|
"bigmap": True,
|
||
|
"maptoworld": [
|
||
|
0.044194173824159216,
|
||
|
-0.08838834764831843,
|
||
|
1.2247448713915894,
|
||
|
0.0,
|
||
|
0.0,
|
||
|
1.0000000000000004,
|
||
|
-0.04419417382415922,
|
||
|
-0.08838834764831842,
|
||
|
1.2247448713915892,
|
||
|
],
|
||
|
"background": None,
|
||
|
"boostzoom": 0,
|
||
|
"name": "surface",
|
||
|
"backgroundnight": None,
|
||
|
"mapzoomin": 1,
|
||
|
},
|
||
|
{
|
||
|
"nightandday": False,
|
||
|
"shader": "cave",
|
||
|
"compassview": "SE",
|
||
|
"prefix": "ct",
|
||
|
"tilescale": 0,
|
||
|
"icon": None,
|
||
|
"scale": 4,
|
||
|
"azimuth": 225.0,
|
||
|
"type": "HDMapType",
|
||
|
"title": "Cave",
|
||
|
"backgroundday": None,
|
||
|
"protected": False,
|
||
|
"mapzoomout": 5,
|
||
|
"perspective": "iso_SE_60_lowres",
|
||
|
"worldtomap": [
|
||
|
2.82842712474619,
|
||
|
0.0,
|
||
|
-2.8284271247461903,
|
||
|
-2.4494897427831783,
|
||
|
1.9999999999999998,
|
||
|
-2.449489742783178,
|
||
|
-4.8074067159589095e-17,
|
||
|
0.9999999999999999,
|
||
|
-4.8074067159589095e-17,
|
||
|
],
|
||
|
"inclination": 60.0,
|
||
|
"image-format": "jpg",
|
||
|
"lighting": "default",
|
||
|
"bigmap": True,
|
||
|
"maptoworld": [
|
||
|
0.17677669529663687,
|
||
|
-0.2041241452319315,
|
||
|
0.408248290463863,
|
||
|
0.0,
|
||
|
-1.3877787807814457e-17,
|
||
|
1.0000000000000002,
|
||
|
-0.1767766952966369,
|
||
|
-0.20412414523193148,
|
||
|
0.40824829046386296,
|
||
|
],
|
||
|
"background": None,
|
||
|
"boostzoom": 0,
|
||
|
"name": "cave",
|
||
|
"backgroundnight": None,
|
||
|
"mapzoomin": 3,
|
||
|
},
|
||
|
],
|
||
|
"extrazoomout": 2,
|
||
|
"center": {"x": 8.0, "y": -64.0, "z": 8.0},
|
||
|
"name": "world",
|
||
|
"title": "world",
|
||
|
"worldheight": 320,
|
||
|
},
|
||
|
{
|
||
|
"sealevel": 63,
|
||
|
"protected": False,
|
||
|
"maps": [
|
||
|
{
|
||
|
"nightandday": False,
|
||
|
"shader": "stdtexture",
|
||
|
"compassview": "S",
|
||
|
"prefix": "flat",
|
||
|
"tilescale": 0,
|
||
|
"icon": None,
|
||
|
"scale": 4,
|
||
|
"azimuth": 270.0,
|
||
|
"type": "HDMapType",
|
||
|
"title": "Flat",
|
||
|
"backgroundday": None,
|
||
|
"protected": False,
|
||
|
"mapzoomout": 5,
|
||
|
"perspective": "iso_S_90_lowres",
|
||
|
"worldtomap": [
|
||
|
4.0,
|
||
|
0.0,
|
||
|
-2.4492935982947064e-16,
|
||
|
-2.4492935982947064e-16,
|
||
|
0.0,
|
||
|
-4.0,
|
||
|
0.0,
|
||
|
1.0,
|
||
|
0.0,
|
||
|
],
|
||
|
"inclination": 90.0,
|
||
|
"image-format": "jpg",
|
||
|
"lighting": "nethershadows",
|
||
|
"bigmap": True,
|
||
|
"maptoworld": [
|
||
|
0.25,
|
||
|
-1.5308084989341915e-17,
|
||
|
0.0,
|
||
|
0.0,
|
||
|
0.0,
|
||
|
1.0,
|
||
|
-1.5308084989341915e-17,
|
||
|
-0.25,
|
||
|
0.0,
|
||
|
],
|
||
|
"background": "#300806",
|
||
|
"boostzoom": 0,
|
||
|
"name": "flat",
|
||
|
"backgroundnight": None,
|
||
|
"mapzoomin": 1,
|
||
|
},
|
||
|
{
|
||
|
"nightandday": False,
|
||
|
"shader": "stdtexture",
|
||
|
"compassview": "SE",
|
||
|
"prefix": "nt",
|
||
|
"tilescale": 0,
|
||
|
"icon": None,
|
||
|
"scale": 16,
|
||
|
"azimuth": 225.0,
|
||
|
"type": "HDMapType",
|
||
|
"title": "Surface",
|
||
|
"backgroundday": None,
|
||
|
"protected": False,
|
||
|
"mapzoomout": 7,
|
||
|
"perspective": "iso_SE_30_hires",
|
||
|
"worldtomap": [
|
||
|
11.31370849898476,
|
||
|
0.0,
|
||
|
-11.313708498984761,
|
||
|
-5.6568542494923815,
|
||
|
13.856406460551018,
|
||
|
-5.656854249492381,
|
||
|
5.551115123125782e-17,
|
||
|
0.9999999999999997,
|
||
|
5.551115123125782e-17,
|
||
|
],
|
||
|
"inclination": 30.0,
|
||
|
"image-format": "jpg",
|
||
|
"lighting": "nethershadows",
|
||
|
"bigmap": True,
|
||
|
"maptoworld": [
|
||
|
0.044194173824159216,
|
||
|
-0.08838834764831843,
|
||
|
1.2247448713915894,
|
||
|
0.0,
|
||
|
0.0,
|
||
|
1.0000000000000004,
|
||
|
-0.04419417382415922,
|
||
|
-0.08838834764831842,
|
||
|
1.2247448713915892,
|
||
|
],
|
||
|
"background": "#300806",
|
||
|
"boostzoom": 0,
|
||
|
"name": "nether",
|
||
|
"backgroundnight": None,
|
||
|
"mapzoomin": 1,
|
||
|
},
|
||
|
],
|
||
|
"extrazoomout": 2,
|
||
|
"center": {"x": 0.0, "y": 66.0, "z": 0.0},
|
||
|
"name": "world_nether",
|
||
|
"title": "world_nether",
|
||
|
"worldheight": 256,
|
||
|
},
|
||
|
{
|
||
|
"sealevel": 63,
|
||
|
"protected": False,
|
||
|
"maps": [
|
||
|
{
|
||
|
"nightandday": False,
|
||
|
"shader": "stdtexture",
|
||
|
"compassview": "S",
|
||
|
"prefix": "flat",
|
||
|
"tilescale": 0,
|
||
|
"icon": None,
|
||
|
"scale": 4,
|
||
|
"azimuth": 270.0,
|
||
|
"type": "HDMapType",
|
||
|
"title": "Flat",
|
||
|
"backgroundday": None,
|
||
|
"protected": False,
|
||
|
"mapzoomout": 5,
|
||
|
"perspective": "iso_S_90_lowres",
|
||
|
"worldtomap": [
|
||
|
4.0,
|
||
|
0.0,
|
||
|
-2.4492935982947064e-16,
|
||
|
-2.4492935982947064e-16,
|
||
|
0.0,
|
||
|
-4.0,
|
||
|
0.0,
|
||
|
1.0,
|
||
|
0.0,
|
||
|
],
|
||
|
"inclination": 90.0,
|
||
|
"image-format": "jpg",
|
||
|
"lighting": "brightnight",
|
||
|
"bigmap": True,
|
||
|
"maptoworld": [
|
||
|
0.25,
|
||
|
-1.5308084989341915e-17,
|
||
|
0.0,
|
||
|
0.0,
|
||
|
0.0,
|
||
|
1.0,
|
||
|
-1.5308084989341915e-17,
|
||
|
-0.25,
|
||
|
0.0,
|
||
|
],
|
||
|
"background": None,
|
||
|
"boostzoom": 0,
|
||
|
"name": "flat",
|
||
|
"backgroundnight": None,
|
||
|
"mapzoomin": 1,
|
||
|
},
|
||
|
{
|
||
|
"nightandday": False,
|
||
|
"shader": "stdtexture",
|
||
|
"compassview": "SE",
|
||
|
"prefix": "st",
|
||
|
"tilescale": 0,
|
||
|
"icon": None,
|
||
|
"scale": 16,
|
||
|
"azimuth": 225.0,
|
||
|
"type": "HDMapType",
|
||
|
"title": "Surface",
|
||
|
"backgroundday": None,
|
||
|
"protected": False,
|
||
|
"mapzoomout": 7,
|
||
|
"perspective": "iso_SE_30_hires",
|
||
|
"worldtomap": [
|
||
|
11.31370849898476,
|
||
|
0.0,
|
||
|
-11.313708498984761,
|
||
|
-5.6568542494923815,
|
||
|
13.856406460551018,
|
||
|
-5.656854249492381,
|
||
|
5.551115123125782e-17,
|
||
|
0.9999999999999997,
|
||
|
5.551115123125782e-17,
|
||
|
],
|
||
|
"inclination": 30.0,
|
||
|
"image-format": "jpg",
|
||
|
"lighting": "brightnight",
|
||
|
"bigmap": True,
|
||
|
"maptoworld": [
|
||
|
0.044194173824159216,
|
||
|
-0.08838834764831843,
|
||
|
1.2247448713915894,
|
||
|
0.0,
|
||
|
0.0,
|
||
|
1.0000000000000004,
|
||
|
-0.04419417382415922,
|
||
|
-0.08838834764831842,
|
||
|
1.2247448713915892,
|
||
|
],
|
||
|
"background": None,
|
||
|
"boostzoom": 0,
|
||
|
"name": "the_end",
|
||
|
"backgroundnight": None,
|
||
|
"mapzoomin": 1,
|
||
|
},
|
||
|
],
|
||
|
"extrazoomout": 2,
|
||
|
"center": {"x": 0.0, "y": 64.0, "z": 0.0},
|
||
|
"name": "world_the_end",
|
||
|
"title": "world_the_end",
|
||
|
"worldheight": 256,
|
||
|
},
|
||
|
],
|
||
|
"confighash": -845210049,
|
||
|
"spammessage": "You may only chat once every %interval% seconds.",
|
||
|
"defaultmap": "flat",
|
||
|
"msg-chatrequireslogin": "Chat Requires Login",
|
||
|
"msg-hiddennamejoin": "Player joined",
|
||
|
"title": "A Minecraft Server",
|
||
|
"grayplayerswhenhidden": True,
|
||
|
"quitmessage": "%playername% quit",
|
||
|
"defaultzoom": 0,
|
||
|
"allowwebchat": True,
|
||
|
"allowchat": True,
|
||
|
"sidebaropened": "False",
|
||
|
"webchat-interval": 5.0,
|
||
|
"msg-chatnotallowed": "You are not permitted to send chat messages",
|
||
|
"loggedin": False,
|
||
|
"coreversion": "3.7-SNAPSHOT-949",
|
||
|
"joinmessage": "%playername% joined",
|
||
|
"webchat-requires-login": False,
|
||
|
"showlayercontrol": "True",
|
||
|
"login-enabled": False,
|
||
|
"maxcount": 20,
|
||
|
"dynmapversion": "3.7-SNAPSHOT-948",
|
||
|
"msg-maptypes": "Map Types",
|
||
|
"cyrillic": False,
|
||
|
"msg-hiddennamequit": "Player quit",
|
||
|
"msg-players": "Players",
|
||
|
"webprefix": "[WEB] ",
|
||
|
"showplayerfacesinmenu": True,
|
||
|
"defaultworld": "world",
|
||
|
}
|