add key plays to post-game scorebug

This commit is contained in:
Cal Corum 2023-07-31 00:29:56 -05:00
parent 6650970bbc
commit 39b81bf10b

View File

@ -1073,12 +1073,23 @@ class Players(commands.Cog):
await asyncio.sleep(1)
setup_tab = scorecard.worksheet_by_title('Setup')
g_data = setup_tab.get_values('M2', 'R3')
setup_vals = setup_tab.get_values('B7', 'R33')
at_abbrev = g_data[0][0]
ht_abbrev = g_data[1][0]
away_mgr_name = g_data[0][2]
home_mgr_name = g_data[1][2]
away_team = await get_team_by_abbrev(at_abbrev, current['season'])
home_team = await get_team_by_abbrev(ht_abbrev, current['season'])
week_num = g_data[0][5]
game_num = g_data[1][5]
if away_team['manager2'] is not None and away_team['manager2']['name'].lower() == away_mgr_name:
away_manager = away_team['manager2']
else:
away_manager = away_team['manager1']
if home_team['manager2'] is not None and home_team['manager2']['name'].lower() == home_mgr_name:
home_manager = home_team['manager2']
else:
home_manager = home_team['manager1']
logging.info(f'gdata: {g_data}\nweek/game: {week_num}/{game_num}')
@ -1226,7 +1237,8 @@ class Players(commands.Cog):
# Log game result
try:
g_resp = await db_patch('games', object_id=this_game['id'], params=[
('away_score', score_table[0][0]), ('home_score', score_table[1][0])
('away_score', int(score_table[0][0])), ('home_score', int(score_table[1][0])),
('away_manager_id', away_manager['id']), ('home_manager_id', home_manager['id']), ('game_num', game_num)
])
except ValueError as e:
logging.error(f'PATCH game error: {e}')
@ -1252,7 +1264,8 @@ class Players(commands.Cog):
b_sv = []
holds = []
for line in all_decisions:
this_data = {'game_id': this_game['id']}
this_data = {'game_id': this_game['id'], 'season': this_game['season'], 'week': this_game['week'],
'game_num': game_num}
for count, x in enumerate(line):
if x != '':
this_data[pit_keys[count]] = x
@ -1285,20 +1298,20 @@ class Players(commands.Cog):
content=f'The following errors were found in your **wk{week_num}g{game_num}** scorecard. '
f'Please resolve them and resubmit - thanks!\n\n{e}'
)
await db_post(f'games/wipe/{this_game["id"]}')
await db_delete('plays/game', object_id=this_game['id'])
await db_delete('decisions/game', object_id=this_game['id'])
return
# Post scorecard to news channel
card_url = f'<{SBA_BASE_URL}/scorecards/?season={current["season"]}&week={week_num}&game={game_num}' \
f'&away_abbrev={away_team["abbrev"]}&home_abbrev={home_team["abbrev"]}>'
extras = ''
if final_inning > 9:
if int(final_inning) > 9:
extras = f' F/{final_inning}'
embed = get_team_embed(
f'{away_team["sname"]} {score_table[0][0]} @ '
f'{score_table[1][0]} {home_team["sname"]}{extras}',
team=away_team if score_table[0][0] > score_table[1][0] else home_team
team=away_team if int(score_table[0][0]) > int(score_table[1][0]) else home_team
)
embed.description = f'Week {week_num} | Game {game_num}'
@ -1314,9 +1327,6 @@ class Players(commands.Cog):
inline=False
)
# TODO: pull highlight stats for embed
logging.info(f'pull highlight stats for embed')
pitching_string = f'WP: {wp["name"]}\n' \
f'LP: {lp["name"]}\n' \
f'{"HD: " if len(holds) > 0 else ""}'
@ -1337,6 +1347,100 @@ class Players(commands.Cog):
embed.add_field(name='Pitching', value=pitching_string, inline=False)
# TODO: pull highlight stats for embed
logging.info(f'pull highlight stats for embed')
p_query = await db_get('plays', params=[
('game_id', this_game['id']), ('sort', 'wpa-desc'), ('limit', 3)
])
key_plays = ''
for play in p_query['plays']:
logging.info(f'this_play: {play}')
this_line = f'- {play["inning_half"].title()} {play["inning_num"]}: '
# Offensive Play
if play['wpa'] > 0:
logging.info('OFFENSE')
if play['runner'] is not None:
logging.info('RUNNER')
if play['on_third'] == play['runner']['id']:
s_base = 'HOME'
elif play['on_second'] == play['runner']['id']:
s_base = 'third'
else:
s_base = 'second'
this_line += f'{play["runner"]["name"]} ({play["runner"]["team"]["abbrev"]}) steals {s_base}'
else:
logging.info('BATTER')
if play['homerun'] == 1:
h_name = 'HOMERS'
elif play['triple'] == 1:
h_name = 'triples'
elif play['double'] == 1:
h_name = 'doubles'
else:
h_name = 'singles'
logging.info('RBI?')
if play['rbi'] > 0:
rbi_string = f'in {play["rbi"]} run{"s" if play["rbi"] > 1 else ""}'
else:
rbi_string = ''
logging.info('LINE?')
this_line += f'{play["batter"]["name"]} ({play["batter"]["team"]["abbrev"]}) {h_name} {rbi_string}'
# Defensive Play
else:
logging.info('DEFENSE')
if play['catcher'] is not None:
logging.info('CATCHER')
if play['on_third_final'] == 0:
s_base = 'HOME'
elif play['on_second_final'] == 0:
s_base = 'third'
else:
s_base = 'second'
this_line += f'{play["catcher"]["name"]} ({play["catcher"]["team"]["abbrev"]}) throws out the ' \
f'runner at {s_base}'
elif play['defender'] is not None:
logging.info('DEFENDER')
if play['outs'] == 3:
play_string = 'turns a TRIPLE PLAY'
elif play['outs'] == 2:
play_string = 'rolls a double play'
else:
play_string = f'makes a tough play at {play["check_pos"]}'
this_line += f'{play["defender"]["name"]} ({play["defender"]["team"]["abbrev"]}) {play_string}'
else:
logging.info('PITCHER')
if play['so'] == 1:
if play['starting_outs'] == 2:
out_th = 'for the 3rd out'
elif play['starting_outs'] == 1:
out_th = 'for the 2nd out'
else:
out_th = 'to leadoff the inning'
play_string = f'gets a K {out_th}'
elif play['on_base_code'] != '000' and play['starting_outs'] + play['outs'] > 2:
num_runners = play["on_base_code"].count("1")
play_string = f'strands {num_runners} runner{"s" if num_runners > 1 else ""}'
else:
if play['starting_outs'] == 2:
play_string = 'records the 3rd out'
elif play['starting_outs'] == 1:
play_string = 'records the 2nd out'
else:
play_string = 'retires the leadoff batter'
this_line += f'{play["pitcher"]["name"]} ({play["pitcher"]["team"]["abbrev"]}) {play_string}'
key_plays += f'{this_line}\n'
if len(key_plays) > 0:
embed.add_field(
name='Key Plays',
value=key_plays,
inline=False
)
# batting_string = ''
# count = 1
# if len(final_doubles) > 0:
@ -1432,7 +1536,8 @@ class Players(commands.Cog):
embed.add_field(
name='Scorecard',
value=f'[Website]({card_url}) / [Sheets]({sheet_url})'
value=f'[Website]({card_url}) / [Sheets]({sheet_url})',
inline=False
)
embed.set_footer(text='Please share the highlights!')
@ -1446,6 +1551,19 @@ class Players(commands.Cog):
update = await interaction.channel.send('I\'m tallying standings now...')
if await db_post(f'standings/s{current["season"]}/recalculate'):
await update.delete()
await interaction.edit_original_response(content='You are all set!')
try:
setup_tab.update_values(
crange=f'B7',
values=setup_vals
)
await interaction.edit_original_response(content='You are all set!')
except Exception as e:
logging.error(f'could not freeze sheet for game {this_game["id"]}')
await interaction.edit_original_response(
content='I was not able to freeze the rosters in your sheet, but everything else went through.'
)
@app_commands.command(name='branding', description='Update your team branding')
@app_commands.guilds(discord.Object(id=os.environ.get('GUILD_ID')))