def player(steamid): steamid = int(steamid) if not steamid: return abort(404) data = {} with Database() as db: # Fetch all query data first player_stats = db.execute(ns2plus_queries.PLAYER_STATS, steamid).fetchall() if not player_stats: return abort(404) data.update(player_stats[0]) player_other_names = db.execute(ns2plus_queries.PLAYER_OTHER_NAMES, steamid).fetchall() data['other_names'] = [x['playerName'] for x in player_other_names] player_weapon_acc = db.execute(ns2plus_queries.PLAYER_WEAPON_ACC, steamid).fetchall() data['weapon_acc'] = {x['weapon']: x['acc'] for x in player_weapon_acc} player_wins = pd.DataFrame( db.execute(ns2plus_queries.PLAYER_WINS, steamid).fetchall()) # TODO: check formula data['steam_url'] = SteamID(int((data['steamId'] - 1) / 2), 1, 1, 0).community_url() # Winrate over time chart for team in (1, 2): df = player_wins[player_wins['teamNumber'] == team] shift = 30 - len(df) % 30 df = df.groupby((np.arange(len(df)) + shift) // 30).agg({ 'win': ['sum', 'count'], 'roundDate': ['last'] }) if len(df): df['winrate'] = df[('win', 'sum')] / df[('win', 'count')] data[f'team{team}_winrate'] = [{ 'x': p[2], 'y': int(p[3] * 100) } for p in df.values] # Activity chart q = [(ns2plus_queries.PLAYER_ACTIVITY, 'activity', steamid), (ns2plus_queries.SERVER_ACTIVITY, 'server_activity', None)] for query, key, arg in q: if arg: q = db.execute(query, arg).fetchall() else: q = db.execute(query).fetchall() df = pd.DataFrame(q) df['Datetime'] = pd.to_datetime(df['roundDate']) df = df.set_index('Datetime') df = df.hoursPlayed.resample('W').sum() data[key] = [{ 'x': x.to_pydatetime().strftime('%Y-%m-%d %H:%M:%S'), 'y': '%.2f' % y } for x, y in zip(list(df.index), list(df.values))] # Class time chart q = db.execute(ns2plus_queries.PLAYER_CLASSTIME, steamid).fetchall() data['classes'] = { c['class']: '%.2f' % c['classTime'] if c['classTime'] else 0 for c in q } lifeforms = ['Gorge', 'Lerk', 'Fade', 'Onos'] lifeforms_time = [(l, float(data['classes'][l])) for l in lifeforms] data['lifeform'] = max(lifeforms_time, key=lambda x: x[1])[0] return render_template('player.html', data=data)
r = requests.get(app.config['GAMESERVER_WEB_HOST'] + '/?request=getchatlist', auth=auth).json() except: pass else: for msg in r: if app.config['LINK_PREFIX'] in msg['message']: token = msg['message'].strip() user = models.User.query.filter_by(token=token).first() if user: if token == user.token: user.ns2_id = msg['steamId'] user.steam_id = int((msg['steamId'] - 1) / 2) user.steam_url = SteamID(user.steam_id, 1, 1, 0).community_url() user.token_used = datetime.datetime.now() while True: new_token = app.config['LINK_PREFIX'] + ''.join( random.choices( string.ascii_lowercase + string.digits, k=5)) token_exists = models.User.query.filter_by( token=new_token).first() if not token_exists: break user.token = new_token db.session.commit() logging.info(