# Shared utilities for players package # Contains common functions extracted from the original players.py import logging import discord from helpers import get_team_embed logger = logging.getLogger("discord_app") def get_ai_records(short_games, long_games): """ Calculate AI team records from game data. Args: short_games: List of short game records long_games: List of long game records Returns: Dict containing records for all MLB teams across different leagues """ all_results = { "ARI": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "ATL": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "BAL": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "BOS": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "CHC": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "CHW": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "CIN": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "CLE": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "COL": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "DET": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "HOU": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "KCR": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "LAA": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "LAD": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "MIA": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "MIL": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "MIN": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "NYM": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "NYY": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "OAK": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "PHI": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "PIT": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "SDP": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "SEA": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "SFG": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "STL": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "TBR": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "TEX": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "TOR": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, "WSN": { "short": {"w": 0, "l": 0, "rd": 0, "points": 0}, "minor": {"w": 0, "l": 0, "rd": 0, "points": 0}, "major": {"w": 0, "l": 0, "rd": 0, "points": 0}, "hof": {"w": 0, "l": 0, "rd": 0, "points": 0}, }, } logger.debug("Running short games...") for line in short_games: home_win = True if line["home_score"] > line["away_score"] else False if line["away_team"]["is_ai"]: all_results[line["away_team"]["abbrev"]]["short"]["w"] += ( 1 if home_win else 0 ) all_results[line["away_team"]["abbrev"]]["short"]["l"] += ( 1 if not home_win else 0 ) all_results[line["away_team"]["abbrev"]]["short"]["points"] += ( 2 if home_win else 1 ) all_results[line["away_team"]["abbrev"]]["short"]["rd"] += ( line["home_score"] - line["away_score"] ) elif line["home_team"]["is_ai"]: all_results[line["home_team"]["abbrev"]]["short"]["w"] += ( 1 if not home_win else 0 ) all_results[line["home_team"]["abbrev"]]["short"]["l"] += ( 1 if home_win else 0 ) all_results[line["home_team"]["abbrev"]]["short"]["points"] += ( 2 if not home_win else 1 ) all_results[line["home_team"]["abbrev"]]["short"]["rd"] += ( line["away_score"] - line["home_score"] ) logger.debug("Done short games") logger.debug("Running league games...") league = { None: "minor", "minor-league": "minor", "major-league": "major", "hall-of-fame": "hof", } for line in long_games: home_win = True if line["home_score"] > line["away_score"] else False if line["away_team"]["is_ai"]: all_results[line["away_team"]["abbrev"]][league[line["game_type"]]][ "w" ] += (1 if home_win else 0) all_results[line["away_team"]["abbrev"]][league[line["game_type"]]][ "l" ] += (1 if not home_win else 0) all_results[line["away_team"]["abbrev"]][league[line["game_type"]]][ "points" ] += (2 if home_win else 1) all_results[line["away_team"]["abbrev"]][league[line["game_type"]]][ "rd" ] += (line["home_score"] - line["away_score"]) elif line["home_team"]["is_ai"]: all_results[line["home_team"]["abbrev"]][league[line["game_type"]]][ "w" ] += (1 if not home_win else 0) all_results[line["home_team"]["abbrev"]][league[line["game_type"]]][ "l" ] += (1 if home_win else 0) all_results[line["home_team"]["abbrev"]][league[line["game_type"]]][ "points" ] += (2 if not home_win else 1) all_results[line["home_team"]["abbrev"]][league[line["game_type"]]][ "rd" ] += (line["away_score"] - line["home_score"]) logger.debug("Done league games") return all_results def get_record_embed_legacy(embed: discord.Embed, results: dict, league: str): """ Legacy format for record embed display organized by MLB divisions. Args: embed: Discord embed to modify results: AI records data league: League type ('short', 'minor', 'major', 'hof') Returns: Modified Discord embed with division standings """ ale_points = ( results["BAL"][league]["points"] + results["BOS"][league]["points"] + results["NYY"][league]["points"] + results["TBR"][league]["points"] + results["TOR"][league]["points"] ) alc_points = ( results["CLE"][league]["points"] + results["CHW"][league]["points"] + results["DET"][league]["points"] + results["KCR"][league]["points"] + results["MIN"][league]["points"] ) alw_points = ( results["HOU"][league]["points"] + results["LAA"][league]["points"] + results["OAK"][league]["points"] + results["SEA"][league]["points"] + results["TEX"][league]["points"] ) nle_points = ( results["ATL"][league]["points"] + results["MIA"][league]["points"] + results["NYM"][league]["points"] + results["PHI"][league]["points"] + results["WSN"][league]["points"] ) nlc_points = ( results["CHC"][league]["points"] + results["CIN"][league]["points"] + results["MIL"][league]["points"] + results["PIT"][league]["points"] + results["STL"][league]["points"] ) nlw_points = ( results["ARI"][league]["points"] + results["COL"][league]["points"] + results["LAD"][league]["points"] + results["SDP"][league]["points"] + results["SFG"][league]["points"] ) embed.add_field( name=f"AL East ({ale_points} pts)", value=f'BAL: {results["BAL"][league]["w"]} - {results["BAL"][league]["l"]} ({results["BAL"][league]["rd"]} RD)\n' f'BOS: {results["BOS"][league]["w"]} - {results["BOS"][league]["l"]} ({results["BOS"][league]["rd"]} RD)\n' f'NYY: {results["NYY"][league]["w"]} - {results["NYY"][league]["l"]} ({results["NYY"][league]["rd"]} RD)\n' f'TBR: {results["TBR"][league]["w"]} - {results["TBR"][league]["l"]} ({results["TBR"][league]["rd"]} RD)\n' f'TOR: {results["TOR"][league]["w"]} - {results["TOR"][league]["l"]} ({results["TOR"][league]["rd"]} RD)\n', ) embed.add_field( name=f"AL Central ({alc_points} pts)", value=f'CLE: {results["CLE"][league]["w"]} - {results["CLE"][league]["l"]} ({results["CLE"][league]["rd"]} RD)\n' f'CHW: {results["CHW"][league]["w"]} - {results["CHW"][league]["l"]} ({results["CHW"][league]["rd"]} RD)\n' f'DET: {results["DET"][league]["w"]} - {results["DET"][league]["l"]} ({results["DET"][league]["rd"]} RD)\n' f'KCR: {results["KCR"][league]["w"]} - {results["KCR"][league]["l"]} ({results["KCR"][league]["rd"]} RD)\n' f'MIN: {results["MIN"][league]["w"]} - {results["MIN"][league]["l"]} ({results["MIN"][league]["rd"]} RD)\n', ) embed.add_field( name=f"AL West ({alw_points} pts)", value=f'HOU: {results["HOU"][league]["w"]} - {results["HOU"][league]["l"]} ({results["HOU"][league]["rd"]} RD)\n' f'LAA: {results["LAA"][league]["w"]} - {results["LAA"][league]["l"]} ({results["LAA"][league]["rd"]} RD)\n' f'OAK: {results["OAK"][league]["w"]} - {results["OAK"][league]["l"]} ({results["OAK"][league]["rd"]} RD)\n' f'SEA: {results["SEA"][league]["w"]} - {results["SEA"][league]["l"]} ({results["SEA"][league]["rd"]} RD)\n' f'TEX: {results["TEX"][league]["w"]} - {results["TEX"][league]["l"]} ({results["TEX"][league]["rd"]} RD)\n', ) embed.add_field( name=f"NL East ({nle_points} pts)", value=f'ATL: {results["ATL"][league]["w"]} - {results["ATL"][league]["l"]} ({results["ATL"][league]["rd"]} RD)\n' f'MIA: {results["MIA"][league]["w"]} - {results["MIA"][league]["l"]} ({results["MIA"][league]["rd"]} RD)\n' f'NYM: {results["NYM"][league]["w"]} - {results["NYM"][league]["l"]} ({results["NYM"][league]["rd"]} RD)\n' f'PHI: {results["PHI"][league]["w"]} - {results["PHI"][league]["l"]} ({results["PHI"][league]["rd"]} RD)\n' f'WSN: {results["WSN"][league]["w"]} - {results["WSN"][league]["l"]} ({results["WSN"][league]["rd"]} RD)\n', ) embed.add_field( name=f"NL Central ({nlc_points} pts)", value=f'CHC: {results["CHC"][league]["w"]} - {results["CHC"][league]["l"]} ({results["CHC"][league]["rd"]} RD)\n' f'CIN: {results["CIN"][league]["w"]} - {results["CIN"][league]["l"]} ({results["CIN"][league]["rd"]} RD)\n' f'MIL: {results["MIL"][league]["w"]} - {results["MIL"][league]["l"]} ({results["MIL"][league]["rd"]} RD)\n' f'PIT: {results["PIT"][league]["w"]} - {results["PIT"][league]["l"]} ({results["PIT"][league]["rd"]} RD)\n' f'STL: {results["STL"][league]["w"]} - {results["STL"][league]["l"]} ({results["STL"][league]["rd"]} RD)\n', ) embed.add_field( name=f"NL West ({nlw_points} pts)", value=f'ARI: {results["ARI"][league]["w"]} - {results["ARI"][league]["l"]} ({results["ARI"][league]["rd"]} RD)\n' f'COL: {results["COL"][league]["w"]} - {results["COL"][league]["l"]} ({results["COL"][league]["rd"]} RD)\n' f'LAD: {results["LAD"][league]["w"]} - {results["LAD"][league]["l"]} ({results["LAD"][league]["rd"]} RD)\n' f'SDP: {results["SDP"][league]["w"]} - {results["SDP"][league]["l"]} ({results["SDP"][league]["rd"]} RD)\n' f'SFG: {results["SFG"][league]["w"]} - {results["SFG"][league]["l"]} ({results["SFG"][league]["rd"]} RD)\n', ) return embed def get_record_embed(team: dict, results: dict, league: str): """ Modern format for record embed display. Args: team: Team data for embed styling results: AI records data (expected format: team -> [wins, losses, run_diff]) league: League type for embed title Returns: Discord embed with team records """ embed = get_team_embed(league, team) embed.add_field( name="AL East", value=f'BAL: {results["BAL"][0]} - {results["BAL"][1]} ({results["BAL"][2]} RD)\n' f'BOS: {results["BOS"][0]} - {results["BOS"][1]} ({results["BOS"][2]} RD)\n' f'NYY: {results["NYY"][0]} - {results["NYY"][1]} ({results["NYY"][2]} RD)\n' f'TBR: {results["TBR"][0]} - {results["TBR"][1]} ({results["TBR"][2]} RD)\n' f'TOR: {results["TOR"][0]} - {results["TOR"][1]} ({results["TOR"][2]} RD)\n', ) embed.add_field( name="AL Central", value=f'CLE: {results["CLE"][0]} - {results["CLE"][1]} ({results["CLE"][2]} RD)\n' f'CHW: {results["CHW"][0]} - {results["CHW"][1]} ({results["CHW"][2]} RD)\n' f'DET: {results["DET"][0]} - {results["DET"][1]} ({results["DET"][2]} RD)\n' f'KCR: {results["KCR"][0]} - {results["KCR"][1]} ({results["KCR"][2]} RD)\n' f'MIN: {results["MIN"][0]} - {results["MIN"][1]} ({results["MIN"][2]} RD)\n', ) embed.add_field( name="AL West", value=f'HOU: {results["HOU"][0]} - {results["HOU"][1]} ({results["HOU"][2]} RD)\n' f'LAA: {results["LAA"][0]} - {results["LAA"][1]} ({results["LAA"][2]} RD)\n' f'OAK: {results["OAK"][0]} - {results["OAK"][1]} ({results["OAK"][2]} RD)\n' f'SEA: {results["SEA"][0]} - {results["SEA"][1]} ({results["SEA"][2]} RD)\n' f'TEX: {results["TEX"][0]} - {results["TEX"][1]} ({results["TEX"][2]} RD)\n', ) embed.add_field( name="NL East", value=f'ATL: {results["ATL"][0]} - {results["ATL"][1]} ({results["ATL"][2]} RD)\n' f'MIA: {results["MIA"][0]} - {results["MIA"][1]} ({results["MIA"][2]} RD)\n' f'NYM: {results["NYM"][0]} - {results["NYM"][1]} ({results["NYM"][2]} RD)\n' f'PHI: {results["PHI"][0]} - {results["PHI"][1]} ({results["PHI"][2]} RD)\n' f'WSN: {results["WSN"][0]} - {results["WSN"][1]} ({results["WSN"][2]} RD)\n', ) embed.add_field( name="NL Central", value=f'CHC: {results["CHC"][0]} - {results["CHC"][1]} ({results["CHC"][2]} RD)\n' f'CIN: {results["CIN"][0]} - {results["CIN"][1]} ({results["CIN"][2]} RD)\n' f'MIL: {results["MIL"][0]} - {results["MIL"][1]} ({results["MIL"][2]} RD)\n' f'PIT: {results["PIT"][0]} - {results["PIT"][1]} ({results["PIT"][2]} RD)\n' f'STL: {results["STL"][0]} - {results["STL"][1]} ({results["STL"][2]} RD)\n', ) embed.add_field( name="NL West", value=f'ARI: {results["ARI"][0]} - {results["ARI"][1]} ({results["ARI"][2]} RD)\n' f'COL: {results["COL"][0]} - {results["COL"][1]} ({results["COL"][2]} RD)\n' f'LAD: {results["LAD"][0]} - {results["LAD"][1]} ({results["LAD"][2]} RD)\n' f'SDP: {results["SDP"][0]} - {results["SDP"][1]} ({results["SDP"][2]} RD)\n' f'SFG: {results["SFG"][0]} - {results["SFG"][1]} ({results["SFG"][2]} RD)\n', ) return embed