56 lines
1.9 KiB
Python
56 lines
1.9 KiB
Python
import json
|
|
from flask import Flask, request, send_file
|
|
|
|
app = Flask(__name__)
|
|
|
|
|
|
@app.route("/")
|
|
def mainPage():
|
|
return open("assets/main.html").read()
|
|
|
|
@app.route("/<path:path>")
|
|
def game(path):
|
|
if "Discord" not in str(request.user_agent):
|
|
return mainPage()
|
|
gameName = request.path.split("/")[1]
|
|
if gameName == "img":
|
|
print("returning image", "assets/images/" + request.path.split("/")[-1].replace(".", "")[:-3] + ".png")
|
|
return send_file("assets/images/" + request.path.split("/")[-1].replace(".", "")[:-3] + ".png", mimetype="image/png")
|
|
gamecode = request.args.get('code')[:-1]
|
|
print(gameName)
|
|
return buildHTML(gamecode,gameName)
|
|
|
|
|
|
def buildHTML(gamecode, gameName):
|
|
with open("assets/stories/" + gameName.replace(".", "") + ".json", "r") as f:
|
|
print("\n\n")
|
|
story = json.loads(f.read())
|
|
nodeName = "start"
|
|
for action in gamecode:
|
|
nodeName = story[nodeName]["choices"][int(action) - 1]["next"]
|
|
print(action, nodeName)
|
|
info = story[nodeName]
|
|
currText = info["text"]
|
|
choices = ""
|
|
for i in range(len(info["choices"])):
|
|
choice = info["choices"][i]
|
|
choiceText = f"{(i + 1) * 10}: " + choice["text"].replace('"', '\\"') + "\\n"
|
|
choices += f"""{{
|
|
"type": 10,
|
|
"content": "{choiceText}"
|
|
}},"""
|
|
color = story["SPECIAL-color"] if "SPECIAL-color" in story.keys() else "0"
|
|
print(str(request.user_agent) + "\n",currText,choices,color)
|
|
|
|
with open('assets/page.html', "r") as page:
|
|
page = page.read()
|
|
page = page.replace("{{CurrText}}", currText.replace('"', '\\"'))
|
|
page = page.replace("{{Choices}}", choices)
|
|
page = page.replace("{{Color}}", color)
|
|
page = page.replace("{{StoryName}}", gameName.replace(".", ""))
|
|
print(page)
|
|
return page
|
|
|
|
if __name__ == '__main__':
|
|
app.run(debug=True, port=1387)
|