forked from DiscordGSM/GameServerMonitor
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.py
More file actions
121 lines (95 loc) · 3.4 KB
/
app.py
File metadata and controls
121 lines (95 loc) · 3.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import json
import os
import re
from dotenv import load_dotenv
from flask import Flask, jsonify, render_template, request
from discordgsm.environment import env, environment
from discordgsm.main import tree
from discordgsm.service import database, gamedig, invite_link, public, whitelist_guilds
from discordgsm.translator import Locale, translations
from discordgsm.version import __version__
load_dotenv()
app = Flask(
__name__,
static_url_path="",
static_folder="public/static",
template_folder="public",
)
cmd = [
command.to_dict(tree)
for command in tree.get_commands(
guild=None if public or len(whitelist_guilds) <= 0 else whitelist_guilds[0]
)
]
@app.route("/")
def index():
show_alert = False
heroku_app_name = ""
if match := re.search(r":\/\/([a-z|\d|-]+)\.herokuapp\.com", request.base_url):
heroku_app_name = match.groups()[0]
if os.getenv("HEROKU_APP_NAME").strip() != heroku_app_name:
show_alert = True
return render_template(
"index.html",
invite_link=invite_link,
show_alert=show_alert,
heroku_app_name=heroku_app_name,
)
if os.getenv("WEB_API_ENABLE", "").lower() == "true":
@app.route("/api/v1/games")
def games():
return jsonify(gamedig.games)
@app.route("/api/v1/info")
async def info():
return jsonify(
{
"version": __version__,
"invite_link": invite_link,
"statistics": await database.statistics(),
}
)
@app.route("/api/v1/commands")
def commands():
return jsonify(cmd)
@app.route("/api/v1/environment-variables")
def environment_variables():
return jsonify(environment.dict)
@app.route("/api/v1/locales")
@app.route("/api/v1/locales/<locale>")
def locales(locale: str = "en-US"):
if locale in translations:
return jsonify(translations[locale])
else:
return jsonify(
{"error": "Invalid locale", "locales": [str(value) for value in Locale]}
)
@app.route("/api/v1/guilds")
def guilds():
with open("public/static/guilds.json", "r", encoding="utf-8") as f:
data = json.loads(f.read())
return jsonify(data)
@app.route("/api/v1/servers")
@app.route("/api/v1/servers/<game_id>")
async def servers(game_id: str = None):
if game_id is None:
servers_count = {game_id: 0 for game_id in gamedig.games}
servers_count.update(await database.count_servers_per_game())
return jsonify(servers_count)
if game_id not in gamedig.games:
return jsonify({"error": "Invalid game id"})
servers = await database.all_servers(game_id=game_id, filter_secret=True)
return jsonify(servers)
@app.route("/api/v1/channels")
@app.route("/api/v1/channels/<channel_id>")
async def channels(channel_id: str = None):
if channel_id is not None and not channel_id.isdigit():
return jsonify({"error": "Invalid channel id"})
if channel_id is None:
servers_count = await database.count_servers_per_channel()
return jsonify(servers_count)
servers = await database.all_servers(
channel_id=int(channel_id), filter_secret=True
)
return jsonify(servers)
if __name__ == "__main__":
app.run(debug=env("APP_DEBUG"))