modified: app.py

This commit is contained in:
SimolZimol
2025-10-26 01:53:54 +02:00
parent 5b91b8ebd3
commit 1030701033

124
app.py
View File

@@ -416,74 +416,74 @@ async def hoi4end(ctx, game_name: str, winner_team: str):
(game_name,)
)
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'])
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
if not game:
await ctx.send(f"❌ No active game found with name '{game_name}'!")
return
# 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)
players = json.loads(game['players']) if game['players'] else []
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(
player['current_elo'],
opponent_avg,
won,
player['t_level']
)
# 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
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
for change in elo_changes:
# Update player ELO