RE24 calc added & post-game embed complete

This commit is contained in:
Cal Corum 2023-10-22 22:40:50 -05:00
parent 49bc017fd3
commit e8df6fc4c3
2 changed files with 156 additions and 22 deletions

View File

@ -26,7 +26,7 @@ from db_calls import db_get, db_patch, db_post, db_delete, get_team_by_abbrev
from db_calls_gameplay import StratGame, StratPlay, StratLineup, StratManagerAi, get_sba_team, get_sba_player, \
post_game, patch_game, get_game_team, post_lineups, make_sub, get_player, player_link, get_team_lineups, \
get_current_play, post_play, get_one_lineup, advance_runners, patch_play, complete_play, get_batting_stats, \
get_pitching_stats, undo_play, get_latest_play, advance_one_runner, count_team_games, get_final_scorebug, \
get_pitching_stats, undo_play, get_latest_play, advance_one_runner, count_team_games, \
get_fielding_stats, get_pitching_decisions, get_or_create_bullpen, get_active_games, patch_lineup, \
get_last_game_ids, get_plays, get_manager, get_one_game, load_ai, ai_batting, undo_subs, get_dbready_plays
@ -188,15 +188,14 @@ class Gameplay(commands.Cog):
# Post Team Choice packs
if this_game.ai_team is not None and not this_game.short_game and 'gauntlet' not in this_game.game_type and \
losing_team['is_ai']:
r_query = await db_get(
'results',
g_query = await db_get(
'games',
params=[
('team_one_id', winning_team['id']), ('team_two_id', losing_team['id']),
('game_type', this_game.game_type), ('season', this_game.season)
('team1_id', human_team['id']), ('game_type', this_game.game_type), ('season', this_game.season)
]
)
wins = 0
for x in r_query['results']:
for x in g_query['games']:
if (x['away_score'] > x['home_score'] and x['away_team']['id'] == human_team['id']) or (
x['home_score'] > x['away_score'] and x['home_team']['id'] == human_team['id']):
wins += 1
@ -211,7 +210,7 @@ class Gameplay(commands.Cog):
}
)
if r_query['count'] > 0:
if g_query['count'] > 0:
if this_game.game_type == 'minor-league' and wins % 6 == 0:
await post_tc_pack()
win_string += f'1x {losing_team["abbrev"]} Team Choice pack\n'
@ -1747,8 +1746,12 @@ class Gameplay(commands.Cog):
)
return
away_team = await db_get('teams', object_id=this_game.away_team_id)
home_team = await db_get('teams', object_id=this_game.home_team_id)
gs = await db_get(f'plays/game-summary/{final_game["id"]}')
await db_patch('games', object_id=gs['game']['id'],
params=[('away_score', gs['runs']['away']), ('home_score', gs['runs']['home'])])
away_team = gs['teams']['away']
home_team = gs['teams']['home']
winning_team = away_team if latest_play.away_score > latest_play.home_score else home_team
losing_team = away_team if latest_play.away_score < latest_play.home_score else home_team
@ -1758,6 +1761,7 @@ class Gameplay(commands.Cog):
loss_reward = r_data['loss_string']
# Post a notification to PD
logging.debug(f'getting inning')
inning = f'{latest_play.inning_num if latest_play.inning_half == "Bot" else latest_play.inning_num - 1}'
embed = get_team_embed(
f'{away_team["lname"]} {latest_play.away_score} @ {latest_play.home_score} {home_team["lname"]} - F/'
@ -1765,6 +1769,14 @@ class Gameplay(commands.Cog):
winning_team
)
logging.debug(f'setting location')
embed.add_field(
name='Location',
value=f'{interaction.guild.get_channel(this_game.channel_id).mention}',
inline=False
)
logging.debug(f'getting league name')
if this_game.game_type == 'major-league':
game_des = 'Major League'
elif this_game.game_type == 'minor-league':
@ -1779,14 +1791,118 @@ class Gameplay(commands.Cog):
game_des = 'Unlimited'
embed.description = f'Score Report - {game_des} ' \
f'{"- 3-Inning Game" if this_game.short_game else " - 9-Inning Game"}'
logging.debug(f'building box score')
embed.add_field(
name='Box Score',
value=f'```\nTeam | R | H | E |\n```',
value=f'```\n'
f'Team | R | H | E |\n'
f'{away_team["abbrev"].replace("Gauntlet-", ""): <4} | {gs["runs"]["away"]: >2} | '
f'{gs["hits"]["away"]: >2} | {gs["errors"]["away"]: >2} |\n'
f'{home_team["abbrev"].replace("Gauntlet-", ""): <4} | {gs["runs"]["home"]: >2} | '
f'{gs["hits"]["home"]: >2} | {gs["errors"]["home"]: >2} |\n'
f'\n```'
)
logging.debug(f'getting potg string')
tp = gs["top-players"][0]
potg_string = f'{player_desc(tp["player"])} - '
if 'hr' in tp:
potg_string += f'{tp["hit"]}-{tp["ab"]}'
if tp['hr'] > 0:
num = f'{tp["hr"]} ' if tp["hr"] > 1 else ""
potg_string += f', {num}HR'
if tp['triple'] > 0:
num = f'{tp["triple"]} ' if tp["triple"] > 1 else ""
potg_string += f', {num}3B'
if tp['double'] > 0:
num = f'{tp["double"]} ' if tp["double"] > 1 else ""
potg_string += f', {num}2B'
if tp['run'] > 0:
potg_string += f', {tp["run"]} R'
if tp['rbi'] > 0:
potg_string += f', {tp["rbi"]} RBI'
else:
potg_string = f'{player_desc(tp["player"])} - {tp["ip"]} IP, {tp["run"]} R'
if tp['run'] != tp['e_run']:
potg_string += f' ({tp["e_run"]} ER)'
potg_string += f', {tp["hit"]} H, {tp["so"]} K'
potg_string += f', {tp["re24"]:.2f} re24'
embed.add_field(
name='Player of the Game',
value=potg_string,
inline=False
)
logging.info(f'potg: {potg_string}')
logging.debug(f'getting pitcher string')
pit_string = f'Win: {gs["pitchers"]["win"]["p_name"]}\n' \
f'Loss: {gs["pitchers"]["loss"]["p_name"]}\n'
if gs['pitchers']['save'] is not None:
pit_string += f'Save: {player_desc(gs["pitchers"]["save"])}'
embed.add_field(
name='Location',
value=f'{interaction.guild.get_channel(this_game.channel_id).mention}'
name=f'Pitching',
value=pit_string,
)
def name_list(raw_list: list) -> str:
logging.info(f'raw_list: {raw_list}')
player_dict = {}
for x in raw_list:
if x['player_id'] not in player_dict:
player_dict[x['player_id']] = x
data_dict = {}
for x in raw_list:
if x['player_id'] not in data_dict:
data_dict[x['player_id']] = 1
else:
data_dict[x['player_id']] += 1
r_string = ''
logging.info(f'players: {player_dict} / data: {data_dict}')
first = True
for p_id in data_dict:
r_string += f'{", " if not first else ""}{player_dict[p_id]["p_name"]}'
if data_dict[p_id] > 1:
r_string += f' {data_dict[p_id]}'
first = False
return r_string
logging.info(f'getting running string')
if len(gs['running']['sb']) + len(gs['running']['csc']) > 0:
run_string = ''
if len(gs['running']['sb']) > 0:
run_string += f'SB: {name_list(gs["running"]["sb"])}\n'
if len(gs['running']['csc']) > 0:
run_string += f'CSc: {name_list(gs["running"]["csc"])}'
embed.add_field(
name=f'Baserunning',
value=run_string
)
logging.info(f'getting xbh string')
if len(gs['xbh']['2b']) + len(gs['xbh']['3b']) + len(gs['xbh']['hr']) > 0:
bat_string = ''
if len(gs['xbh']['2b']) > 0:
bat_string += f'2B: {name_list(gs["xbh"]["2b"])}\n'
if len(gs['xbh']['3b']) > 0:
bat_string += f'3B: {name_list(gs["xbh"]["3b"])}\n'
if len(gs['xbh']['hr']) > 0:
bat_string += f'HR: {name_list(gs["xbh"]["hr"])}\n'
else:
bat_string = 'Oops! All bitches! No XBH from either team.'
logging.info(f'building embed')
embed.add_field(
name='Batting',
value=bat_string,
inline=False
)
embed.add_field(
name=f'{winning_team["abbrev"]} Rewards',
@ -1801,6 +1917,7 @@ class Gameplay(commands.Cog):
value=f'Please share the highlights in {get_channel(interaction, "pd-news-ticker").mention}!',
inline=False
)
logging.info(f'sending scorebug')
await send_to_channel(self.bot, 'pd-network-news', embed=embed)
# Gauntlet results and reward

View File

@ -1490,6 +1490,7 @@ def complete_play(play_id, batter_to_base: int = None):
add_run_last_player_ab(this_play.on_third, this_play.error == 0)
this_play.save()
# for runner in [this_play.on_first_final, this_play.on_second_final, this_play.on_third_final]:
# if runner == 4:
# score_increment += 1
@ -1600,6 +1601,22 @@ def complete_play(play_id, batter_to_base: int = None):
this_play.is_go_ahead = 1
this_play.save()
# RE24 Calc
re_data = {
0: [0.457, 0.231, 0.077],
1: [0.793, 0.438, 0.171],
2: [1.064, 0.596, 0.259],
4: [1.373, 0.772, 0.351],
3: [1.340, 0.874, 0.287],
5: [1.687, 1.042, 0.406],
6: [1.973, 1.311, 0.448],
7: [2.295, 1.440, 0.618]
}
start_re24 = re_data[this_play.on_base_code][this_play.starting_outs]
end_re24 = 0 if this_play.starting_outs + this_play.outs == 3 else re_data[new_obc][new_starting_outs]
this_play.re24 = end_re24 - start_re24 + score_increment
this_play.save()
batter = get_one_lineup(this_play.game.id, team_id=new_bteam_id, batting_order=new_batting_order)
batter_id = batter.id if batter else None
pitcher = get_one_lineup(this_play.game_id, team_id=new_pteam_id, position='P')
@ -2282,16 +2299,16 @@ def get_pitching_decisions(game: StratGame, db_game_id: int):
# if next_p_first.away_score < next_p_first.home_score:
def get_final_scorebug(away_team, home_team, away_score, home_score):
return f'```' \
f'Team | R | H | E |\n' \
f'{away_team["abbrev"].replace("Gauntlet-", ""): <4} | {away_stats["score"]: >2} | ' \
f'{away_stats["hits"]: >2} | ' \
f'{away_stats["f_lines"][0]["tm_error"] if away_stats["f_lines"] else 0: >2} |\n' \
f'{home_team["abbrev"].replace("Gauntlet-", ""): <4} | {home_stats["score"]: >2} | ' \
f'{home_stats["hits"]: >2} | ' \
f'{home_stats["f_lines"][0]["tm_error"] if home_stats["f_lines"] else 0: >2} |\n' \
f'```'
# def get_final_scorebug(away_team, home_team, away_score, home_score):
# return f'```' \
# f'Team | R | H | E |\n' \
# f'{away_team["abbrev"].replace("Gauntlet-", ""): <4} | {away_stats["score"]: >2} | ' \
# f'{away_stats["hits"]: >2} | ' \
# f'{away_stats["f_lines"][0]["tm_error"] if away_stats["f_lines"] else 0: >2} |\n' \
# f'{home_team["abbrev"].replace("Gauntlet-", ""): <4} | {home_stats["score"]: >2} | ' \
# f'{home_stats["hits"]: >2} | ' \
# f'{home_stats["f_lines"][0]["tm_error"] if home_stats["f_lines"] else 0: >2} |\n' \
# f'```'
db.close()