Files
cyoa-discord/server.py
T

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)