def _start(code): if not verifiers.verify_session_logged_in(): session['error'] = "You cant access _start page before logging in!" return redirect(url_for('index')) if not verifiers.verify_host(code): return redirect(url_for('home')) error = checks.check_for_start_error(code) if error: session['error'] = error return redirect(url_for('game', code=code)) foundGame = Game.query.filter_by(code=code).first() foundGame.started = 1 foundGame.alive = foundGame.players players = json.loads(foundGame.players) settings = json.loads(foundGame.settings) targets = {} n = len(players) permutation = maff.random_permutation(n) for i in range(n): targets[players[permutation[i]]] = { "word": maff.get_word(settings), "target": players[permutation[(i + 1) % n]], "assassin": players[permutation[i - 1]] } targets = json.dumps(targets) killCount = {} for player in players: killCount[player] = 0 killCount = json.dumps(killCount) foundGame.targets = targets foundGame.killCount = killCount db.session.commit() return redirect(url_for('game', code=code))
def _kick(code, user): if not verifiers.verify_session_logged_in(): session['error'] = "You cant access _kick page before logging in!" return redirect(url_for('index')) if not verifiers.verify_host(code) or user == session['user']: session['error'] = "Something is not right! (_kick page)" return redirect(url_for('game', code=code)) error = checks.check_for_kick_error(code, user) if error: session['error'] = error return redirect(url_for('game', code=code)) foundGame = Game.query.filter_by(code=code).first() foundPlayer = Player.query.filter_by(user=user).first() games = json.loads(foundPlayer.games) games.remove(code) #removes game from the games list of the user foundPlayer.games = json.dumps(games) players = json.loads(foundGame.players) players.remove(user) #removes user from the player list of the game foundGame.players = json.dumps(players) db.session.commit() return redirect(url_for('game', code=code))
def _change_settings(code): if not verifiers.verify_session_logged_in(): session[ 'error'] = "You cant access _change_settings page before logging in!" return redirect(url_for('index')) if not verifiers.verify_host(code): return redirect(url_for('home')) settings = {} try: #tries to get info settings['difficulty'] = request.form['difficulty'] settings['passon'] = request.form['passon'] except KeyError: #this only runs is someone messes with the html settings['difficulty'], settings['passon'], = "", "" error = checks.check_for_settings_error(settings) if error: session['error'] = error return redirect(url_for('game', code=code)) foundGame = Game.query.filter_by(code=code).first() foundGame.settings = json.dumps(settings) db.session.commit() return redirect(url_for('game', code=code))
def _join(): if not verifiers.verify_session_logged_in(): session['error'] = "You cant access _join page before logging in!" return redirect(url_for('index')) try: #tries to get code code = request.form['code'].lower() except KeyError: #only runs if someone messes with html code = "" error = checks.check_for_join_error(code) if error: session['error'] = error return redirect(url_for('join')) else: foundPlayer = Player.query.filter_by(user=session['user']).first() foundGame = Game.query.filter_by(code=code).first() foundGame.players = json.dumps( json.loads(foundGame.players) + [session['user']]) #adds user to the player list of the game foundPlayer.games = json.dumps( json.loads(foundPlayer.games) + [code]) #adds game to the games list of the user db.session.commit() return redirect(url_for('game', code=code))
def home(): if not verifiers.verify_session_logged_in( ): #verifies that user is logged in session['error'] = "You cant access home page before logging in!" return redirect(url_for('index')) try: error = session.pop('error') except KeyError: error = "" data = {} #data that will be put into html template data['user'] = session['user'] try: foundPlayer = Player.query.filter_by(user=session['user']).first() data['name'] = foundPlayer.name data['status'] = foundPlayer.status data['theme'] = str(foundPlayer.theme) data['activeGames'], data['pastGames'] = [], [] games = json.loads(foundPlayer.games) for game in games: #sorts games into active and past ones if checks.check_if_game_complete(game) == 'active': data['activeGames'].append( fetchers.get_active_button_info(game)) else: data['pastGames'].append(fetchers.get_past_button_info(game)) data['stats'] = json.loads(foundPlayer.stats) except Exception as e: return (str(e)) return render_template('home.html', data=data, error=error)
def join(): if not verifiers.verify_session_logged_in(): session['error'] = "You cant access join page before logging in!" return redirect(url_for('index')) try: error = session.pop('error') except KeyError: error = "" theme = session['theme'] return render_template('join.html', error=error, theme=theme)
def debug(): if not verifiers.verify_session_logged_in( ) or not session['user'] == 'admin': session['error'] = "You cant access debug page" return redirect(url_for('index')) playerRows = Player.query.all() #rows of the Players table gameRows = Game.query.all() #rows of the Games table pastRows = PastGame.query.all() #rows of the pastGames table return render_template('debug.html', playerRows=playerRows, gameRows=gameRows, pastRows=pastRows)
def game(code): if not verifiers.verify_session_logged_in(): session['error'] = "You cant access game page before logging in!" return redirect(url_for('index')) completeness = checks.check_if_game_complete(code) if completeness == "active": return activeGame(code) elif completeness == "past": return pastGame(code) else: return redirect(url_for('home'))
def _change_theme(): if not verifiers.verify_session_logged_in(): session[ 'error'] = "You cant access _change_theme page before logging in!" return redirect(url_for('index')) foundPlayer = Player.query.filter_by(user=session['user']).first() theme = foundPlayer.theme theme = (theme + 1) % 4 session['theme'] = str(theme) foundPlayer.theme = theme db.session.commit() return redirect(url_for('home'))
def _purge(code, user): if not verifiers.verify_session_logged_in(): session['error'] = "You cant access _purge page before logging in!" return redirect(url_for('index')) #TODO: check if page is updated with database. Catches if host tries purging without refreshing page if not verifiers.verify_host(code): session['error'] = "something is not right! (_purge)" return redirect(url_for('game', code=code)) error = checks.check_for_purge_error(code, user) if error: session['error'] = error return redirect(url_for('game', code=code)) foundGame = Game.query.filter_by(code=code).first() alive = json.loads(foundGame.alive) alive.remove(user) #removes user from the alive list of the game settings = json.loads(foundGame.settings) targets = maff.edit_targets_on_kill(user, json.loads(foundGame.targets), settings) killCount = json.loads(foundGame.killCount) killLog = json.loads(foundGame.killLog) + [ (targets[user]['assassin'], "purged", user, targets[user]['word']) ] #adds to kill log purged = json.loads( foundGame.purged) + [user] #adds user to the purged list of the game if len(alive) > 1: foundGame.alive = json.dumps(alive) foundGame.targets = json.dumps(targets) foundGame.killLog = json.dumps(killLog) foundGame.purged = json.dumps(purged) else: players = json.loads(foundGame.players) survivalWinner = alive[0] killWinners = maff.create_killWinners(players, killCount) fetchers.distribute_kills_and_wins(players, killCount, survivalWinner, killWinners) pastgame = PastGame(code=code, name=foundGame.name, settings=foundGame.settings, host=foundGame.host, players=json.dumps(players), survivalWinner=survivalWinner, killWinners=json.dumps(killWinners), killLog=json.dumps(killLog)) db.session.add(pastgame) db.session.delete(foundGame) #deletes from games db.session.commit() return redirect(url_for('game', code=code))
def create(): if not verifiers.verify_session_logged_in(): session['error'] = "You cant access create page before logging in!" return redirect(url_for('index')) try: error, code, name = session.pop('error'), session.pop( 'code'), session.pop('name') except KeyError: error, code, name = "", "", "" theme = session['theme'] return render_template('create.html', error=error, code=code, name=name, theme=theme)
def _killed(code): if not verifiers.verify_session_logged_in(): session['error'] = "You cant access _killed page before logging in!" return redirect(url_for('index')) user = session['user'] error = checks.check_for_killed_error(code, user) if error: session['error'] = error return redirect(url_for('game', code=code)) foundGame = Game.query.filter_by(code=code).first() alive = json.loads(foundGame.alive) alive.remove(user) #removes user from the alive list of the game settings = json.loads(foundGame.settings) targets = maff.edit_targets_on_kill(user, json.loads(foundGame.targets), settings) killCount = json.loads(foundGame.killCount) killCount[targets[user]['assassin']] += 1 #adds to assassin's kill count killLog = json.loads(foundGame.killLog) + [ (targets[user]['assassin'], "killed", user, targets[user]['word']) ] #adds to kill log if len(alive) > 1: #if the game is not yet over foundGame.alive = json.dumps(alive) foundGame.targets = json.dumps(targets) foundGame.killCount = json.dumps(killCount) foundGame.killLog = json.dumps(killLog) else: #the game has just finished players = json.loads(foundGame.players) survivalWinner = alive[0] killWinners = maff.create_killWinners(players, killCount) fetchers.distribute_kills_and_wins(players, killCount, survivalWinner, killWinners) pastgame = PastGame(code=code, name=foundGame.name, settings=foundGame.settings, host=foundGame.host, players=json.dumps(players), survivalWinner=survivalWinner, killWinners=json.dumps(killWinners), killLog=json.dumps(killLog)) db.session.add(pastgame) db.session.delete(foundGame) #deletes from games db.session.commit() return redirect(url_for('game', code=code))
def _create(): if not verifiers.verify_session_logged_in(): session['error'] = "You cant access _create page before logging in!" return redirect(url_for('index')) settings = {} try: #tries to get info code = request.form['code'].lower().strip() name = request.form['name'].strip() settings['difficulty'] = request.form['difficulty'] settings['passon'] = request.form['passon'] except KeyError: #this only runs is someone messes with the html code, name, settings['difficulty'], settings['passon'] = "", "", "", "" error = checks.check_for_create_error(code, name, settings) if error: session['error'] = error session['code'] = code session['name'] = name return redirect(url_for('create')) else: try: game = Game(code=code, name=name, settings=json.dumps(settings), host=session['user'], started=0, players=json.dumps([session['user']]), alive=json.dumps([]), purged=json.dumps([]), targets=json.dumps({}), killCount=json.dumps({}), killLog=json.dumps([])) db.session.add(game) #adds game to game table foundPlayer = Player.query.filter_by(user=session['user']).first() foundPlayer.games = json.dumps( json.loads(foundPlayer.games) + [code]) #adds game to the games list of the user db.session.commit() except Exception as e: return (str(e)) return redirect(url_for('game', code=code))
def _cancel(code): if not verifiers.verify_session_logged_in(): session['error'] = "You cant access _cancel page before logging in!" return redirect(url_for('index')) if not verifiers.verify_host(code): return redirect(url_for('home')) error = checks.check_for_cancel_error(code) if error: session['error'] = error return redirect(url_for('home')) foundGame = Game.query.filter_by(code=code).first() for player in json.loads( foundGame.players): #delets the game from each players game list foundPlayer = Player.query.filter_by(user=player).first() games = json.loads(foundPlayer.games) games.remove(code) #removes game to the games list of the user foundPlayer.games = json.dumps(games) db.session.delete(foundGame) db.session.commit() return redirect(url_for('home'))