Add files via upload
This commit is contained in:
parent
c0324d0d31
commit
4931661c04
52
dataModel.py
Normal file
52
dataModel.py
Normal file
|
@ -0,0 +1,52 @@
|
|||
import time
|
||||
keysTypes = {
|
||||
"state": str,
|
||||
"details": str,
|
||||
"large_image": str,
|
||||
"small_image": str,
|
||||
"large_text": str,
|
||||
"small_text": str,
|
||||
"start": [float, int, None],
|
||||
"end": [float, int, None],
|
||||
"timeFlip": bool,
|
||||
"lastTimeUpdate": [float, int, bool]
|
||||
}
|
||||
default = {
|
||||
"default": {
|
||||
"state": "Idling",
|
||||
"details": "No workspace is enabled",
|
||||
"large_image": "laptop",
|
||||
"small_image": "waiting",
|
||||
"large_text": "Idling",
|
||||
"small_text": "Waiting",
|
||||
"start": time.time(),
|
||||
"end": None,
|
||||
"lastTimeUpdate": 0,
|
||||
"forgetTimeIfNoContact": 0,
|
||||
"issuerName": "base",
|
||||
"accessCode": "a",
|
||||
"publicRead": True,
|
||||
"descriptar": "default"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
def is_valid_current_data_format(dic):
|
||||
return True
|
||||
global keysTypes
|
||||
for key in keysTypes.keys():
|
||||
if not key in dic.keys():
|
||||
return False
|
||||
elif not isinstance(keysTypes[key], list):
|
||||
if not isinstance(dic[key], keysTypes[key]) or (dic[key]
|
||||
== keysTypes[key]):
|
||||
return False
|
||||
else:
|
||||
flag = False
|
||||
for kType in keysTypes[key]:
|
||||
if isinstance(dic[key], kType) or (dic[key] == kType):
|
||||
flag = True
|
||||
break
|
||||
if not flag:
|
||||
return False
|
||||
return True
|
237
discord.py
Normal file
237
discord.py
Normal file
|
@ -0,0 +1,237 @@
|
|||
from pypresence import Presence
|
||||
import time, subprocess, json
|
||||
import dataModel
|
||||
import handler
|
||||
import threading
|
||||
import asyncio
|
||||
import uuid
|
||||
# current_data structure
|
||||
# state -> state
|
||||
# details -> details
|
||||
# large_image
|
||||
# small_image
|
||||
# large_text
|
||||
# small_text
|
||||
# start
|
||||
# end
|
||||
# timeFilip
|
||||
# lastTimeUpdate
|
||||
# descriptar
|
||||
|
||||
import flask
|
||||
from flask import request, jsonify
|
||||
|
||||
app = flask.Flask(__name__)
|
||||
app.config["DEBUG"] = False
|
||||
|
||||
current_data = dataModel.default
|
||||
|
||||
|
||||
@app.route('/new', methods=['POST'])
|
||||
def new():
|
||||
global current_data
|
||||
if (request.json == None): # is body empty?
|
||||
res = {
|
||||
"ok": False,
|
||||
"errorId": 1,
|
||||
"error": "No json body supplied"
|
||||
} # error -> no json body supplied
|
||||
elif "descriptar" not in request.json.keys(
|
||||
): # is the descriptar app present?
|
||||
res = {
|
||||
"ok": False,
|
||||
"errorId": 4,
|
||||
"error": "Descriptar not specified"
|
||||
} # error -> descriptar does not exist
|
||||
elif request.json["descriptar"] in current_data.keys(
|
||||
): # is the descriptar app present?
|
||||
res = {
|
||||
"ok": False,
|
||||
"errorId": 4,
|
||||
"error": "Descriptar already used"
|
||||
} # error -> descriptar does not exist
|
||||
else:
|
||||
temp = dict(current_data)
|
||||
temp[request.json["descriptar"]] = {}
|
||||
for key in request.json.keys(): # loop through keys
|
||||
if key not in dataModel.default["default"].keys(): # is key in the list?
|
||||
return key
|
||||
res = {"ok": False, "errorId": 8, "error": "Key invalid"}
|
||||
return jsonify(res)
|
||||
else:
|
||||
temp[request.json["descriptar"]][key] = request.json[key]
|
||||
if dataModel.is_valid_current_data_format(temp):
|
||||
temp[request.json["descriptar"]]["accessCode"] = str(uuid.uuid4())
|
||||
current_data[request.json["descriptar"]] = temp[
|
||||
request.json["descriptar"]]
|
||||
res = {"ok": True, "accessCode":temp[request.json["descriptar"]]}
|
||||
else:
|
||||
res = {"ok": False}
|
||||
return jsonify(res)
|
||||
|
||||
|
||||
@app.route('/set/<descriptar>', methods=['POST'])
|
||||
def setD(descriptar):
|
||||
global current_data # global current data store
|
||||
if (request.json == None): # is body empty?
|
||||
res = {
|
||||
"ok": False,
|
||||
"errorId": 1,
|
||||
"error": "No json body supplied"
|
||||
} # error -> no json body supplied
|
||||
elif not descriptar in current_data.keys(
|
||||
): # is the descriptar app present?
|
||||
res = {
|
||||
"ok": False,
|
||||
"errorId": 4,
|
||||
"error": "Descriptar does not exist"
|
||||
} # error -> descriptar does not exist
|
||||
elif "accessCode" in request.json.keys(
|
||||
) and current_data[descriptar]["accessCode"] != request.json[
|
||||
"accessCode"]: # is access code present and correct
|
||||
res = {
|
||||
"ok": False,
|
||||
"errorId": 5,
|
||||
"error": "Invalid access code"
|
||||
} # error -> the access code is invalid
|
||||
else:
|
||||
temp = dict(current_data[descriptar]) # generate temporary list
|
||||
for key in request.json.keys(): # loop through keys
|
||||
if key not in dataModel.default["default"].keys(): # is key in the list?
|
||||
res = {"ok": False, "errorId": 8, "error": "Key invalid"}
|
||||
return jsonify(res)
|
||||
else:
|
||||
temp[descriptar][key] = request.json[key]
|
||||
if dataModel.is_valid_current_data_format(temp):
|
||||
current_data[descriptar] = temp[descriptar]
|
||||
res = {"ok": True}
|
||||
else:
|
||||
res = {"ok": False}
|
||||
return jsonify(res)
|
||||
|
||||
|
||||
@app.route('/get/<descriptar>',
|
||||
methods=['POST']) # get a rich presence by his descriptar
|
||||
def get(descriptar):
|
||||
global current_data # global current data store
|
||||
if (request.json == None): # is body empty?
|
||||
res = {
|
||||
"ok": False,
|
||||
"errorId": 1,
|
||||
"error": "No json body supplied"
|
||||
} # error -> no json body supplied
|
||||
else:
|
||||
if not descriptar in current_data.keys(
|
||||
): # is the descriptar app present?
|
||||
res = {
|
||||
"ok": False,
|
||||
"errorId": 4,
|
||||
"error": "Descriptar Does not exist"
|
||||
} # error -> descriptar does not exist
|
||||
elif "accessCode" in request.json.keys(
|
||||
): # is an access code specified?
|
||||
if current_data[descriptar]["accessCode"] == request.json[
|
||||
"accessCode"]: # Is the access code correct?
|
||||
res = current_data[descriptar] # send current Data
|
||||
else:
|
||||
res = {
|
||||
"ok": False,
|
||||
"errorId": 5,
|
||||
"error": "Invalid access code"
|
||||
} # error -> the access code is invalid
|
||||
elif "publicRead" in current_data[descriptar].keys() and current_data[descriptar]["publicRead"]: # is public read allowed?
|
||||
res = current_data[descriptar] # pull data
|
||||
res.pop("accessCode") # ! remove accessCode for security
|
||||
else:
|
||||
res = {
|
||||
"ok": False,
|
||||
"errorId": 6,
|
||||
"error": "Unauthorized"
|
||||
} # error -> not authorized
|
||||
|
||||
print(res)
|
||||
return jsonify(res) # send data
|
||||
|
||||
|
||||
@app.route('/delete/<descriptar>', methods=['DELETE'])
|
||||
def delete(descriptar):
|
||||
res={"ok": True}
|
||||
if (request.json == None): # is body empty?
|
||||
res = {
|
||||
"ok": False,
|
||||
"errorId": 1,
|
||||
"error": "No json body supplied"
|
||||
} # error -> no json body supplied
|
||||
elif not descriptar in current_data.keys(
|
||||
): # is the descriptar app present?
|
||||
res = {
|
||||
"ok": False,
|
||||
"errorId": 4,
|
||||
"error": "Descriptar does not exist"
|
||||
} # error -> descriptar does not exist
|
||||
elif "accessCode" in request.json.keys(
|
||||
) and current_data[descriptar]["accessCode"] != request.json[
|
||||
"accessCode"]: # is access code present and correct
|
||||
res = {
|
||||
"ok": False,
|
||||
"errorId": 5,
|
||||
"error": "Invalid access code"
|
||||
} # error -> the access code is invalid
|
||||
else:
|
||||
current_data.pop(descriptar)
|
||||
return res
|
||||
|
||||
|
||||
def diTH():
|
||||
global current_data
|
||||
connected = False
|
||||
while not connected:
|
||||
try:
|
||||
client_id = '778926641333796885' # Fake ID, put your real one here
|
||||
RPC = Presence(client_id) # Initialize the client class
|
||||
RPC.connect() # Start the handshake loop
|
||||
connected = True
|
||||
except Exception as e:
|
||||
print(126)
|
||||
print(e)
|
||||
connected = False
|
||||
time.sleep(20)
|
||||
while True: # The presence will stay on as long as the program is running
|
||||
try:
|
||||
print("---cdata---")
|
||||
print(current_data)
|
||||
print("---Ecdata---")
|
||||
d = handler.handle(current_data)
|
||||
print(d)
|
||||
RPC.update(state=d["state"],
|
||||
details=d["details"],
|
||||
large_image=d["large_image"],
|
||||
small_image=d["small_image"],
|
||||
large_text=d["large_text"],
|
||||
small_text=d["small_text"],
|
||||
start=d["start"],
|
||||
end=d["end"])
|
||||
time.sleep(15) # Can only update rich presence every 15 seconds
|
||||
except Exception as e:
|
||||
print(144)
|
||||
print(e)
|
||||
while not connected:
|
||||
try:
|
||||
client_id = '778926641333796885' # Fake ID, put your real one here
|
||||
RPC = Presence(client_id) # Initialize the client class
|
||||
RPC.connect() # Start the handshake loop
|
||||
connected = True
|
||||
except Exception as e:
|
||||
print(149)
|
||||
print(e)
|
||||
connected = False
|
||||
time.sleep(20)
|
||||
|
||||
|
||||
def server():
|
||||
app.run(port=4020)
|
||||
|
||||
|
||||
thread = threading.Thread(target=server)
|
||||
thread.start()
|
||||
diTH()
|
2
handler.py
Normal file
2
handler.py
Normal file
|
@ -0,0 +1,2 @@
|
|||
def handle(cdata):
|
||||
return cdata["default"]
|
Reference in New Issue
Block a user