from flask import Flask, render_template, request, jsonify, session
import requests
import json
import times
from datetime import timedelta
import apis
import constants
import traceback
app = Flask(__name__)
headers = {
'Content-Type':'application/json',
}
userData = {}
@app.route('/get/', methods=['GET'])
def get_data():
try:
fullTime = times.hour_rounder()
finalTime = fullTime - timedelta(hours=24)
unixTime = times.timeToUnix(finalTime)
if unixTime in userData:
userDataTime = userData[unixTime]
if userDataTime['username'] == request.args.get('username'):
return jsonify({"message": f"true"}), 200
else:
return jsonify({"message": f"false"}), 404
else:
return jsonify({"message": f"false"}), 404
except Exception as e:
print(e)
return jsonify({"error": "Invalid JSON data"}), 400
@app.route('/claim/', methods=['POST'])
def set_data():
try:
data = request.get_json()
print(type(data))
userData[data['time']] = {
"username" : data['username'],
"messageID" : data['messageID']
}
print(data)
return jsonify({"message": f"Sucess"}), 200
except Exception as e:
print(e)
return jsonify({"error": "Invalid JSON data"}), 400
claimMessages = {}
@app.route('/deleteclaim/', methods=['GET'])
def delete_claim():
try:
fullTime = times.hour_rounder()
finalTime = fullTime - timedelta(hours=2 * 12)
unixtime = times.timeToUnix(finalTime)
values = list(claimMessages.values())
if unixtime in values:
print("Running")
key_list = list(claimMessages.keys())
position = values.index(unixtime)
messageID = key_list[position]
return jsonify({"message": int(messageID)}), 200
else:
print(values)
print(unixtime)
return jsonify({"message" : "Not Found"}), 404
except Exception as e:
print(e)
return jsonify({"error": "Invalid JSON data"}), 400
@app.route('/end/', methods=['POST'])
def end_server():
try:
data = request.get_json()
print(type(data))
print(data)
winnersText = ""
for item in data['winners']:
userID = apis.getID(item)
winnersText = winnersText + f"[{item}](https://www.roblox.com/users/{userID}/profile), "
messageID = 0
for userDataTime in userData:
userDataInfo = userData[userDataTime]
if userDataInfo['messageID'] and userDataInfo['username'] == data['host']:
messageID = userData[userDataTime]['messageID']
print("MESSAGE ID: " + str(messageID))
hostText = f"[{data['host']}](https://www.roblox.com/users/{apis.getID(data['host'])}/profile)"
embedData = {
"content": None,
"embeds": [
{
"title": "Tournament Ended",
"description": f"""**Host:** {hostText}
**Type:** {data['type']}
**Tier:** {data['tier']}
**Time:** Ended
**Region:** {data['region']}
**Players:** {data['players']}
**Prize:** {data['prize']} Coins
**Winners:** {winnersText}""",
"color": 11796480,
"thumbnail": {
"url": "https://cdn.discordapp.com/attachments/1155829751919943690/1167127610548035584/ra3.png?ex=654cff4a&is=653a8a4a&hm=4bdf2ad5600f5bc358dc0a7ab824c67d63713451cb2c9f7d426d4e1c1a3e0c4f&"
}
}
],
"attachments": []
}
finalURL = constants.webhookURLs['end'] + str(messageID)
webhookRequest = requests.patch(url=finalURL, data=json.dumps(embedData), headers=headers)
print(webhookRequest.status_code)
try:
print(webhookRequest.json())
except:
pass
return jsonify({"message": f"Sucess"}), 200
except Exception as e:
print(e)
traceback.print_exc()
return jsonify({"error": "Invalid JSON data"}), 400
@app.route('/matchlogs/', methods=['POST'])
def match_logs():
try:
data = request.get_json()
print(type(data))
print(data)
winnerWins = data['winnerWins']
loserWins = data['loserWins']
winnersText = ""
losersText = ""
winnersKDR = {}
losersKDR = {}
winnerData = data['winners']
for winnerUsername in winnerData:
currentKills = winnerData[winnerUsername]['kills']
currentDeaths = winnerData[winnerUsername]['deaths']
currentKDR = (currentKills/currentDeaths)
winnersKDR[winnerUsername] = currentKDR
loserData = data['losers']
for loserUsername in loserData:
currentKills = loserData[loserUsername]['kills']
currentDeaths = loserData[loserUsername]['deaths']
currentKDR = (currentKills/currentDeaths)
losersKDR[loserUsername] = currentKDR
sortedWinnerKDR = sorted(winnersKDR, reverse=True)
sortedLosersKDR = sorted(losersKDR, reverse=True)
if winnersKDR[sortedWinnerKDR[0]] > losersKDR[sortedLosersKDR[0]]:
print("WINNERS WINNING")
for winnerUsername in sortedWinnerKDR:
if winnerUsername == sortedWinnerKDR[0]:
winnersText += f":star: [{winnerUsername}](https://www.roblox.com/users/{apis.getID(winnerUsername)}/profile) `{winnerData[winnerUsername]['kills']} | {winnerData[winnerUsername]['deaths']}` \n"
else:
winnersText += f"[{winnerUsername}](https://www.roblox.com/users/{apis.getID(winnerUsername)}/profile) `{winnerData[winnerUsername]['kills']} | {winnerData[winnerUsername]['deaths']}` \n"
for loserUsername in sortedLosersKDR:
losersText += f"[{loserUsername}](https://www.roblox.com/users/{apis.getID(loserUsername)}/profile) `{loserData[loserUsername]['kills']} | {loserData[loserUsername]['deaths']}` \n"
elif winnersKDR[sortedWinnerKDR[0]] < losersKDR[sortedLosersKDR[0]]:
print("LOSERS WINNING")
for loserUsername in sortedLosersKDR:
if loserUsername == sortedLosersKDR[0]:
losersText += f":star: [{loserUsername}](https://www.roblox.com/users/{apis.getID(loserUsername)}/profile) `{loserData[loserUsername]['kills']} | {loserData[loserUsername]['deaths']}` \n"
else:
losersText += f"[{loserUsername}](https://www.roblox.com/users/{apis.getID(loserUsername)}/profile) `{loserData[loserUsername]['kills']} | {loserData[loserUsername]['deaths']}` \n"
for winnerUsername in sortedWinnerKDR:
winnersText += f"[{winnerUsername}](https://www.roblox.com/users/{apis.getID(winnerUsername)}/profile) `{winnerData[winnerUsername]['kills']} | {winnerData[winnerUsername]['deaths']}` \n"
print(sortedWinnerKDR)
print(sortedLosersKDR)
print(winnersText)
print(losersText)
print(winnerData)
print(loserData)
embedData = {
"content": None,
"embeds": [
{
"title": "Match Logs",
"color": 11796480,
"thumbnail": {
"url": "https://cdn.discordapp.com/attachments/1155829751919943690/1167127610548035584/ra3.png?ex=654cff4a&is=653a8a4a&hm=4bdf2ad5600f5bc358dc0a7ab824c67d63713451cb2c9f7d426d4e1c1a3e0c4f&"
},
"fields": [
{
"name": f"Winners [{winnerWins}-{loserWins}]",
"value": winnersText
},
{
"name": f"Losers [{loserWins}-{winnerWins}]",
"value" : losersText
}
]
}
],
"attachments": []
}
finalURL = constants.webhookURLs['matchLogs']
webhookRequest = requests.post(url=finalURL, data=json.dumps(embedData), headers=headers)
print(webhookRequest.status_code)
try:
print(webhookRequest.json())
except:
pass
return jsonify({"message": f"Sucess"}), 200
except Exception as e:
print(e)
traceback.print_exc()
return jsonify({"error": "Invalid JSON data"}), 400
def startApp():
app.run(debug=False, host="0.0.0.0", port=8140)