modified: app.py
This commit is contained in:
124
app.py
124
app.py
@@ -416,74 +416,74 @@ async def hoi4end(ctx, game_name: str, winner_team: str):
|
|||||||
(game_name,)
|
(game_name,)
|
||||||
)
|
)
|
||||||
game = await cursor.fetchone()
|
game = await cursor.fetchone()
|
||||||
|
|
||||||
if not game:
|
|
||||||
await ctx.send(f"❌ No active game found with name '{game_name}'!")
|
|
||||||
return
|
|
||||||
|
|
||||||
players = json.loads(game['players']) if game['players'] else []
|
|
||||||
|
|
||||||
if len(players) < 2:
|
|
||||||
await ctx.send("❌ Game needs at least 2 players to end!")
|
|
||||||
return
|
|
||||||
|
|
||||||
# Check if winner team exists
|
|
||||||
teams = {p['team_name'] for p in players}
|
|
||||||
if winner_team not in teams:
|
|
||||||
await ctx.send(f"❌ Team '{winner_team}' not found in game! Available teams: {', '.join(teams)}")
|
|
||||||
return
|
|
||||||
|
|
||||||
# Calculate team averages
|
|
||||||
team_elos = {}
|
|
||||||
team_players = {}
|
|
||||||
|
|
||||||
for player in players:
|
|
||||||
team = player['team_name']
|
|
||||||
if team not in team_elos:
|
|
||||||
team_elos[team] = []
|
|
||||||
team_players[team] = []
|
|
||||||
|
|
||||||
team_elos[team].append(player['current_elo'])
|
if not game:
|
||||||
team_players[team].append(player)
|
await ctx.send(f"❌ No active game found with name '{game_name}'!")
|
||||||
|
return
|
||||||
# Calculate average ELOs for each team
|
|
||||||
team_averages = {team: sum(elos) / len(elos) for team, elos in team_elos.items()}
|
|
||||||
|
|
||||||
elo_changes = []
|
|
||||||
|
|
||||||
# Calculate ELO changes for each player
|
|
||||||
for player in players:
|
|
||||||
team = player['team_name']
|
|
||||||
won = team == winner_team
|
|
||||||
|
|
||||||
# Calculate opponent average (average of all other teams)
|
players = json.loads(game['players']) if game['players'] else []
|
||||||
opponent_elos = []
|
|
||||||
for other_team, elos in team_elos.items():
|
|
||||||
if other_team != team:
|
|
||||||
opponent_elos.extend(elos)
|
|
||||||
|
|
||||||
opponent_avg = sum(opponent_elos) / len(opponent_elos) if opponent_elos else player['current_elo']
|
if len(players) < 2:
|
||||||
|
await ctx.send("❌ Game needs at least 2 players to end!")
|
||||||
|
return
|
||||||
|
|
||||||
elo_change = calculate_elo_change(
|
# Check if winner team exists
|
||||||
player['current_elo'],
|
teams = {p['team_name'] for p in players}
|
||||||
opponent_avg,
|
if winner_team not in teams:
|
||||||
won,
|
await ctx.send(f"❌ Team '{winner_team}' not found in game! Available teams: {', '.join(teams)}")
|
||||||
player['t_level']
|
return
|
||||||
)
|
|
||||||
|
|
||||||
new_elo = max(0, player['current_elo'] + elo_change) # Prevent negative ELO
|
# Calculate team averages
|
||||||
|
team_elos = {}
|
||||||
|
team_players = {}
|
||||||
|
|
||||||
|
for player in players:
|
||||||
|
team = player['team_name']
|
||||||
|
if team not in team_elos:
|
||||||
|
team_elos[team] = []
|
||||||
|
team_players[team] = []
|
||||||
|
|
||||||
|
team_elos[team].append(player['current_elo'])
|
||||||
|
team_players[team].append(player)
|
||||||
|
|
||||||
|
# Calculate average ELOs for each team
|
||||||
|
team_averages = {team: sum(elos) / len(elos) for team, elos in team_elos.items()}
|
||||||
|
|
||||||
|
elo_changes = []
|
||||||
|
|
||||||
|
# Calculate ELO changes for each player
|
||||||
|
for player in players:
|
||||||
|
team = player['team_name']
|
||||||
|
won = team == winner_team
|
||||||
|
|
||||||
|
# Calculate opponent average (average of all other teams)
|
||||||
|
opponent_elos = []
|
||||||
|
for other_team, elos in team_elos.items():
|
||||||
|
if other_team != team:
|
||||||
|
opponent_elos.extend(elos)
|
||||||
|
|
||||||
|
opponent_avg = sum(opponent_elos) / len(opponent_elos) if opponent_elos else player['current_elo']
|
||||||
|
|
||||||
|
elo_change = calculate_elo_change(
|
||||||
|
player['current_elo'],
|
||||||
|
opponent_avg,
|
||||||
|
won,
|
||||||
|
player['t_level']
|
||||||
|
)
|
||||||
|
|
||||||
|
new_elo = max(0, player['current_elo'] + elo_change) # Prevent negative ELO
|
||||||
|
|
||||||
|
elo_changes.append({
|
||||||
|
'discord_id': player['discord_id'],
|
||||||
|
'username': player['username'],
|
||||||
|
'team_name': team,
|
||||||
|
't_level': player['t_level'],
|
||||||
|
'old_elo': player['current_elo'],
|
||||||
|
'new_elo': new_elo,
|
||||||
|
'elo_change': elo_change,
|
||||||
|
'won': won
|
||||||
|
})
|
||||||
|
|
||||||
elo_changes.append({
|
|
||||||
'discord_id': player['discord_id'],
|
|
||||||
'username': player['username'],
|
|
||||||
'team_name': team,
|
|
||||||
't_level': player['t_level'],
|
|
||||||
'old_elo': player['current_elo'],
|
|
||||||
'new_elo': new_elo,
|
|
||||||
'elo_change': elo_change,
|
|
||||||
'won': won
|
|
||||||
})
|
|
||||||
|
|
||||||
# Update player ELOs and save game results
|
# Update player ELOs and save game results
|
||||||
for change in elo_changes:
|
for change in elo_changes:
|
||||||
# Update player ELO
|
# Update player ELO
|
||||||
|
|||||||
Reference in New Issue
Block a user