This repository has been archived by the owner on Oct 18, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathdashboard.py
131 lines (103 loc) · 3.98 KB
/
dashboard.py
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
122
123
124
125
126
127
128
129
130
131
import config
from quart import Quart, render_template, request, session, redirect, url_for
from quart_discord import DiscordOAuth2Session
from discord.ext import ipc
from utils import database
from globals import modules
app = Quart(__name__, static_folder="web/public", template_folder="web/templates")
ipc_client = ipc.Client(secret_key=config.ipc_key)
app.config["SECRET_KEY"] = config.secret_key
app.config["DISCORD_CLIENT_ID"] = config.discord_client_id
app.config["DISCORD_CLIENT_SECRET"] = config.discord_client_secret
app.config["DISCORD_REDIRECT_URI"] = config.discord_redirect_uri
discord = DiscordOAuth2Session(app)
################## DASHBOARD ##################
@app.route("/")
async def home():
authorized = await discord.authorized
if authorized == True:
return redirect("/dashboard")
else:
return await render_template("index.html")
@app.route("/login/")
async def login():
return await discord.create_session()
@app.route("/callback/")
async def callback():
try:
await discord.callback()
except:
return redirect(url_for("login"))
return redirect("/dashboard")
@app.route("/dashboard")
async def dashboard():
authorized = await discord.authorized
if authorized != True:
return redirect("/")
guild_ids = await ipc_client.request("get_mutual_guilds")
user_guilds = await discord.fetch_guilds()
user = await discord.fetch_user()
admin_guilds = []
mutual_guilds = []
for guild in user_guilds:
if guild.permissions.administrator == True and guild.id not in guild_ids:
admin_guilds.append(guild)
elif guild.permissions.administrator == True and guild.id in guild_ids:
mutual_guilds.append(guild)
return await render_template("dashboard.html", admin_guilds=admin_guilds, mutual_guilds=mutual_guilds, user=user, config=config)
@app.route("/dashboard/<guild_id>")
async def guild_dashboard(guild_id):
authorized = await discord.authorized
if authorized != True:
return redirect("/")
user = await discord.fetch_user()
guilds = await discord.fetch_guilds()
for guild in guilds:
if guild.id == int(guild_id):
return await render_template("guild-dashboard.html", guild=guild, user=user, modules=modules)
@app.route("/dashboard/<guild_id>/<module>")
async def guild_dashboard_leveling(guild_id, module):
authorized = await discord.authorized
if authorized != True:
return redirect("/")
user = await discord.fetch_user()
guilds = await discord.fetch_guilds()
for guild in guilds:
if guild.id == int(guild_id):
return await render_template(f"{module}.html", guild=guild, user=user, config=database.get_config((guild.id)))
return redirect("/")
@app.route("/logout")
async def logout():
discord.revoke()
return redirect("/")
########################## API ##########################
@app.route("/api/leaderboard/<guild_id>")
async def api_get_leaderboard(guild_id):
data = {}
i = 0
users = database.get_leaderboard(guild_id, request.args["offset"], request.args["limit"])
for user in users:
display_name = await ipc_client.request("get_display_name_by_id", user_id=user["user_id"])
user["display_name"] = display_name
data[i] = user
i += 1
return data
@app.route("/api/settings/get/<guild_id>")
async def api_get_setting(guild_id):
authorized = await discord.authorized
if authorized != True:
return "unauthorized"
config = database.get_config(int(guild_id))
return config
@app.route("/api/settings/change/<guild_id>", methods=["POST"])
async def api_change_setting(guild_id):
authorized = await discord.authorized
if authorized != True:
return "unauthorized"
args = await request.form
callback = database.change_config(guild_id, args["item"], args["value"])
if callback == True:
return "done"
else:
return "error"
app.run("127.0.0.1", 5000, debug=True)