RE24 calc added & post-game embed complete
This commit is contained in:
parent
49bc017fd3
commit
e8df6fc4c3
141
cogs/gameplay.py
141
cogs/gameplay.py
@ -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, \
|
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, \
|
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_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_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
|
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
|
# 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 \
|
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']:
|
losing_team['is_ai']:
|
||||||
r_query = await db_get(
|
g_query = await db_get(
|
||||||
'results',
|
'games',
|
||||||
params=[
|
params=[
|
||||||
('team_one_id', winning_team['id']), ('team_two_id', losing_team['id']),
|
('team1_id', human_team['id']), ('game_type', this_game.game_type), ('season', this_game.season)
|
||||||
('game_type', this_game.game_type), ('season', this_game.season)
|
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
wins = 0
|
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 (
|
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']):
|
x['home_score'] > x['away_score'] and x['home_team']['id'] == human_team['id']):
|
||||||
wins += 1
|
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:
|
if this_game.game_type == 'minor-league' and wins % 6 == 0:
|
||||||
await post_tc_pack()
|
await post_tc_pack()
|
||||||
win_string += f'1x {losing_team["abbrev"]} Team Choice pack\n'
|
win_string += f'1x {losing_team["abbrev"]} Team Choice pack\n'
|
||||||
@ -1747,8 +1746,12 @@ class Gameplay(commands.Cog):
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
away_team = await db_get('teams', object_id=this_game.away_team_id)
|
gs = await db_get(f'plays/game-summary/{final_game["id"]}')
|
||||||
home_team = await db_get('teams', object_id=this_game.home_team_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
|
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
|
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']
|
loss_reward = r_data['loss_string']
|
||||||
|
|
||||||
# Post a notification to PD
|
# 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}'
|
inning = f'{latest_play.inning_num if latest_play.inning_half == "Bot" else latest_play.inning_num - 1}'
|
||||||
embed = get_team_embed(
|
embed = get_team_embed(
|
||||||
f'{away_team["lname"]} {latest_play.away_score} @ {latest_play.home_score} {home_team["lname"]} - F/'
|
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
|
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':
|
if this_game.game_type == 'major-league':
|
||||||
game_des = 'Major League'
|
game_des = 'Major League'
|
||||||
elif this_game.game_type == 'minor-league':
|
elif this_game.game_type == 'minor-league':
|
||||||
@ -1779,14 +1791,118 @@ class Gameplay(commands.Cog):
|
|||||||
game_des = 'Unlimited'
|
game_des = 'Unlimited'
|
||||||
embed.description = f'Score Report - {game_des} ' \
|
embed.description = f'Score Report - {game_des} ' \
|
||||||
f'{"- 3-Inning Game" if this_game.short_game else " - 9-Inning Game"}'
|
f'{"- 3-Inning Game" if this_game.short_game else " - 9-Inning Game"}'
|
||||||
|
logging.debug(f'building box score')
|
||||||
embed.add_field(
|
embed.add_field(
|
||||||
name='Box Score',
|
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
|
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(
|
embed.add_field(
|
||||||
name='Location',
|
name=f'Pitching',
|
||||||
value=f'{interaction.guild.get_channel(this_game.channel_id).mention}'
|
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(
|
embed.add_field(
|
||||||
name=f'{winning_team["abbrev"]} Rewards',
|
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}!',
|
value=f'Please share the highlights in {get_channel(interaction, "pd-news-ticker").mention}!',
|
||||||
inline=False
|
inline=False
|
||||||
)
|
)
|
||||||
|
logging.info(f'sending scorebug')
|
||||||
await send_to_channel(self.bot, 'pd-network-news', embed=embed)
|
await send_to_channel(self.bot, 'pd-network-news', embed=embed)
|
||||||
|
|
||||||
# Gauntlet results and reward
|
# Gauntlet results and reward
|
||||||
|
|||||||
@ -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)
|
add_run_last_player_ab(this_play.on_third, this_play.error == 0)
|
||||||
|
|
||||||
this_play.save()
|
this_play.save()
|
||||||
|
|
||||||
# for runner in [this_play.on_first_final, this_play.on_second_final, this_play.on_third_final]:
|
# for runner in [this_play.on_first_final, this_play.on_second_final, this_play.on_third_final]:
|
||||||
# if runner == 4:
|
# if runner == 4:
|
||||||
# score_increment += 1
|
# 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.is_go_ahead = 1
|
||||||
this_play.save()
|
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 = 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
|
batter_id = batter.id if batter else None
|
||||||
pitcher = get_one_lineup(this_play.game_id, team_id=new_pteam_id, position='P')
|
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:
|
# if next_p_first.away_score < next_p_first.home_score:
|
||||||
|
|
||||||
|
|
||||||
def get_final_scorebug(away_team, home_team, away_score, home_score):
|
# def get_final_scorebug(away_team, home_team, away_score, home_score):
|
||||||
return f'```' \
|
# return f'```' \
|
||||||
f'Team | R | H | E |\n' \
|
# f'Team | R | H | E |\n' \
|
||||||
f'{away_team["abbrev"].replace("Gauntlet-", ""): <4} | {away_stats["score"]: >2} | ' \
|
# f'{away_team["abbrev"].replace("Gauntlet-", ""): <4} | {away_stats["score"]: >2} | ' \
|
||||||
f'{away_stats["hits"]: >2} | ' \
|
# f'{away_stats["hits"]: >2} | ' \
|
||||||
f'{away_stats["f_lines"][0]["tm_error"] if away_stats["f_lines"] else 0: >2} |\n' \
|
# 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_team["abbrev"].replace("Gauntlet-", ""): <4} | {home_stats["score"]: >2} | ' \
|
||||||
f'{home_stats["hits"]: >2} | ' \
|
# f'{home_stats["hits"]: >2} | ' \
|
||||||
f'{home_stats["f_lines"][0]["tm_error"] if home_stats["f_lines"] else 0: >2} |\n' \
|
# f'{home_stats["f_lines"][0]["tm_error"] if home_stats["f_lines"] else 0: >2} |\n' \
|
||||||
f'```'
|
# f'```'
|
||||||
|
|
||||||
|
|
||||||
db.close()
|
db.close()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user