Example #1
0
def questControlMenu():
    player = db.getPlayer(session.get("discordId"))
    quests = [
        quest for quest in db.getAllQuests()
        if quest.dm and (quest.commander == player.discordId
                         or player.discordId in quest.players.keys())
    ]
    # Sort by date (no date after everything else)
    quests = sorted(quests, key=lambda x: x.date if x.date else float('inf'))
    currentQuestId = request.args.get("questId")
    currentQuest = None
    if currentQuestId == None:
        if len(
                quests
        ) > 0:  # If the quest id wasn't specified, default the first on the list
            currentQuest = quests[0]
    else:
        for quest in quests:  # Find the quest with the right id
            if quest.questId == currentQuestId:
                currentQuest = quest
    playerDict = {player.discordId: player for player in db.getAllPlayers()}
    return render_template("controlcenter.html",
                           player=player,
                           quests=quests,
                           currentQuest=currentQuest,
                           roles=Roles,
                           playerDict=playerDict)
Example #2
0
def controlCenterAction(action):
    logAction()
    questId = request.args['questId']
    discordId = session.get("discordId")
    quest = db.getQuest(questId)
    player = db.getPlayer(discordId)
    if action == "claimRole":
        roleId = request.args['roleId']
        result, message = quest.setRole(player, roleId)
        if result:
            role = Roles[roleId]
            player.leadership -= role['cost']
    elif action == "releaveRole":
        roleId = quest.getPlayerRole(player)
        result, message = quest.setRole(player, None)
        if result:
            role = Roles[roleId]
            player.leadership += role['cost']
    elif action == "useActive":
        activeId = request.args['activeId']
        result, message = quest.activateRolePower(player, activeId)
        if result:
            active = Roles[quest.getPlayerRole(player)]['actives'][activeId]
            player.leadership -= active['cost']
            # if activeId == "striketrue" and player.discordId == 153199290641022977:
            #     db.pushTask("WHISPER")
    else:
        return "Unknown action", 400
    if result:
        db.setQuest(quest)
        db.setPlayer(player)
        return message, 200
    else:
        return message, 400
Example #3
0
def questPlayerAction(action):
    logAction()
    questId = request.args['questId']
    discordId = session.get("discordId")
    quest = db.getQuest(questId)
    player = db.getPlayer(discordId)
    if action == "claimCommander":
        result, message = quest.setCommander(player)
        if result:
            player.leadership -= quest.leadershipReq
    elif action == "releaveCommander":
        result, message = quest.setCommander(None)
        if result:
            player.leadership += quest.leadershipReq
    elif action == "joinQuest":
        # Recredit the leadership if they are currently a commander
        if player.discordId == quest.commander:
            player.leadership += quest.leadershipReq
        result, message = quest.addPlayer(player)
    elif action == "leaveQuest":
        result, message = quest.removePlayer(player)
    else:
        return "Unknown action", 400
    if result:
        db.setQuest(quest)
        db.setPlayer(player)
        return message, 200
    else:
        return message, 400
Example #4
0
def dmCorner():
    player = db.getPlayer(session.get("discordId"))
    quests = db.getAllQuests()
    playerDict = {player.discordId: player for player in db.getAllPlayers()}
    return render_template("dmcorner.html",
                           player=player,
                           quests=quests,
                           playerDict=playerDict)
Example #5
0
 def wrapper(*args, **kwargs):
     discordId = session.get("discordId")
     if discordId == None:
         return redirect(config.ApiKeys['discord']['OAuthUrl'], code=302)
     player = db.getPlayer(session.get("discordId"))
     if player == None:
         session.clear()
         return redirect(config.ApiKeys['discord']['OAuthUrl'], code=302)
     return func(*args, **kwargs)
Example #6
0
def chronicle():
    player = db.getPlayer(session.get("discordId"))
    playerDict = {player.discordId: player for player in db.getAllPlayers()}
    pastQuests = db.getPastQuests()
    return render_template("thechronicle.html",
                           player=player,
                           playerDict=playerDict,
                           pastQuests=pastQuests,
                           roles=Roles)
Example #7
0
def stampReference():
    player = db.getPlayer(session.get("discordId"))
    stampData = []
    currentTotal = 0
    for level, stampsToNext in config.StampLevelToNext.items():
        stampData.append((level, currentTotal))
        currentTotal += stampsToNext
    return render_template("stampReference.html",
                           player=player,
                           stampData=stampData)
Example #8
0
def updatePlayerStats():
    logAction()
    formData = request.form.to_dict()
    discordId = formData.pop("discordId")
    player = db.getPlayer(discordId)
    if player == None:
        return "Player not found", 404
    player.deserialise(formData)
    db.setPlayer(player)
    return redirect("/playeradmin", code=302)
Example #9
0
def index():
    player = db.getPlayer(session.get("discordId"))
    playerDict = {player.discordId: player for player in db.getAllPlayers()}
    quests = db.getAllQuests()
    quests = sorted(quests, key=lambda x: x.date if x.date else float('inf'))
    return render_template("questboard.html",
                           player=player,
                           quests=quests,
                           playerDict=playerDict,
                           roles=Roles)
Example #10
0
def spendCompanyPoints():
    logAction()
    influence = int(request.form['influence'])
    leadership = int(request.form['leadership'])
    discordId = session.get("discordId")
    player = db.getPlayer(discordId)
    result, message = player.spendPoints(influence, leadership)
    db.setPlayer(player)
    if result:
        return redirect(request.referrer or "/")
    else:
        return message, 400
Example #11
0
 def wrapper(*args, **kwargs):
     player = db.getPlayer(session.get("discordId"))
     questId = request.args.get("questId") or request.form.to_dict().get(
         "questId")
     if questId == None:
         return func(*args, )
     quest = db.getQuest(questId)
     if quest == None:
         return func(*args, **kwargs)
     if player.admin or quest.commander == player.discordId or quest.dm == player.discordId:
         return func(*args, **kwargs)
     return "You do not have write access to this quest", 403
Example #12
0
def questadmin():
    playerDict = {
        int(player.discordId): player
        for player in db.getAllPlayers()
    }
    quests = db.getAllQuests()
    player = db.getPlayer(session.get("discordId"))
    return render_template("questadmin.html",
                           player=player,
                           quests=quests,
                           playerDict=playerDict,
                           roles=Roles)
Example #13
0
def dmClaimQuest():
    logAction()
    questId = request.args['questId']
    discordId = session.get("discordId")
    quest = db.getQuest(questId)
    player = db.getPlayer(discordId)
    if quest.dm != None:
        return "This quest already has a DM", 403
    quest.setDm(player)
    db.setQuest(quest)
    if quest.dm != None:
        db.pushTask("NEWQUEST " + quest.questId)
    return redirect("/dmcorner", code=302)
Example #14
0
def updateSelfStats():
    logAction()
    formData = request.form.to_dict()
    discordId = session.get("discordId")
    player = db.getPlayer(discordId)
    if "influence" in formData:
        assert int(formData['influence']) >= 0
        player.influence = formData['influence']
    if "leadership" in formData:
        assert int(formData['leadership']) >= 0
        player.leadership = formData['leadership']
    db.setPlayer(player)
    return redirect(request.referrer or "/")
Example #15
0
def addQuestPageDM():
    player = db.getPlayer(session.get("discordId"))
    playerDict = {player.discordId: player for player in db.getAllPlayers()}
    if request.args.get("questId"):
        questId = request.args.get('questId')
        quest = db.getQuest(questId)
        if quest == None: return (f"Quest id {questId} not found", 404)
    else:
        quest = Quest()
    return render_template("addquest.html",
                           player=player,
                           prefill=quest,
                           DM=True,
                           playerDict=playerDict)
Example #16
0
def actionLogs():
    logs = subprocess.check_output(
        ['/usr/bin/tail', '-20', './logs/questactions.log'])
    logs = logs.decode("utf-8").splitlines()[::-1]
    players = db.getAllPlayers()
    quests = db.getAllQuests()
    for i, log in enumerate(logs):
        for player in players:
            logs[i] = logs[i].replace(
                str(player.discordId), f"""
            <div class="inlinediv discord-{player.discordId}">
                <div class="innerdiv nick">{player.nick}</div>
                <div class="innerdiv discordId">{player.discordId}</div>
            </div>
            """)
    player = db.getPlayer(session.get("discordId"))
    return render_template("serverlogs.html",
                           player=player,
                           players=players,
                           quests=quests,
                           logs=logs)
Example #17
0
def dmCornerAction(action):
    logAction()
    questId = request.args['questId']
    discordId = request.args.get('discordId')
    quest = db.getQuest(questId)
    if discordId == None:
        player = None
    else:
        player = db.getPlayer(discordId)
    result, message = None, None
    # if action == "setDate":
    #     result, message = quest.setDate(request.args.get("date"))
    if action == "kickPlayer":
        result, message = quest.removePlayer(player)
    elif action == "releaveDM":
        result, message = quest.setDm(None)
    else:
        return "Unknown action", 400
    if result:
        db.setQuest(quest)
        return message, 200
    else:
        return message, 400
Example #18
0
def questAdminAction(action):
    logAction()
    questId = request.args['questId']
    discordId = request.args.get("discordId")
    quest = db.getQuest(questId)
    if discordId == None:
        player = None
    else:
        player = db.getPlayer(discordId)
    if action == "changeCommander":
        result, message = quest.setCommander(player, forceAdd=True)
    elif action == "changeDM":
        result, message = quest.setDm(player, forceAdd=True)
    elif action == "addPlayer":
        result, message = quest.addPlayer(player, removeCommander=False, forceAdd=True)
    elif action == "removePlayer":
        result, message = quest.removePlayer(player)
    elif action == "changeRole":
        roleId = request.args['roleId']
        if roleId == "unselected":
            roleId = None
        result, message = quest.setRole(player, roleId, forceAdd=True)
    elif action == "refreshPlayerRole":
        result, message = quest.refreshPlayerRole(player)
    elif action == "setVoidRewards":
        boolparam = request.args["boolparam"]
        if boolparam == "false": boolparam = False
        elif boolparam == "true": boolparam = True
        else: return "Missing boolparam", 400
        result, message = quest.setVoidRewards(player, boolparam)
    else:
        return "Unknown action", 400
    if result:
        db.setQuest(quest)
        return message, 200
    else:
        return message, 400
Example #19
0
def setDatePage():
    player = db.getPlayer(session.get("discordId"))
    questId = request.args['questId']
    quest = db.getQuest(questId)
    if quest == None: return (f"Quest id {questId} not found", 404)
    return render_template("setDate.html", player=player, quest=quest)
Example #20
0
def makeICS():
    player = db.getPlayer(request.args["discordId"])
    cal = db.makeICS(player)
    return Response(str(cal), mimetype="text/calendar", headers={"Content-disposition":
                 "attachment; filename=chainmarches.ics"})
Example #21
0
def playeradmin():
    player = db.getPlayer(session.get("discordId"))
    return render_template("playeradmin.html",
                           player=player,
                           players=db.getAllPlayers(),
                           quests=db.getAllQuests())
Example #22
0
 def wrapper(*args, **kwargs):
     player = db.getPlayer(session.get("discordId"))
     if player == None or not player.admin:
         return "You require admin permission to access this resource", 403
     return func(*args, **kwargs)
Example #23
0
 def wrapper(*args, **kwargs):
     player = db.getPlayer(session.get("discordId"))
     if player == None or not (player.canDM or player.admin):
         return "You are not able to DM a quest", 403
     return func(*args, **kwargs)