Add /running-calcs

This commit is contained in:
Cal Corum 2024-07-19 16:03:05 -05:00
parent c21c966caa
commit 1a8f758e84

View File

@ -2407,6 +2407,190 @@ class Players(commands.Cog):
# }
# self.rolls.append(this_roll)
group_running_calcs = app_commands.Group(
name='running-calcs',
description='Let Domo do the math for your runner advancement'
)
@group_running_calcs.command(name='fly-b', description='Tag play from second base')
@app_commands.rename(
this_of='which-outfielder',
speed='runner-speed',
arm='outfielder-arm'
)
@commands.has_any_role(SBA_PLAYERS_ROLE_NAME, PD_PLAYERS_ROLE_NAME)
async def running_calcs_flyb(
self, interaction: discord.Interaction, this_of: Literal['LF', 'CF', 'RF'], speed: int, arm: int):
await interaction.response.defer()
max_safe = speed + arm
min_out = 20 + arm
if this_of == 'RF':
max_safe += 2
min_out += 2
elif this_of == 'LF':
max_safe -= 2
min_out -= 2
if max_safe >= 20:
max_safe = 19
min_out = 21
safe_range = f'1'
if max_safe > 1:
safe_range += f' - {max_safe}'
out_range = 'None'
if min_out <= 20:
out_range = f'{min_out}'
if min_out < 20:
out_range += ' - 20'
if max_safe >= 20:
hold_range = '20'
elif (max_safe + 1) < min_out:
hold_range = f'{max_safe + 1}'
if (max_safe + 2) < min_out:
hold_range += f' - {min_out - 1}'
else:
hold_range = 'None'
tag_embed = get_team_embed('Flyball B Running')
tag_embed.add_field(name='Safe Range', value=safe_range)
tag_embed.add_field(name='Hold Range', value=hold_range)
tag_embed.add_field(name='Out Range', value=out_range)
await interaction.edit_original_response(content=None, embed=tag_embed)
def play_at_home(self, speed: int, arm: int):
max_safe = speed + arm
safe_range = f'1'
if max_safe >= 19:
safe_range += ' - 18'
catcher_range = '19 - 20'
out_range = 'None'
elif max_safe == 18:
safe_range += ' - 17'
catcher_range = '18 - 19'
out_range = '20'
elif max_safe > 2:
safe_range += f' - {max_safe - 1}'
catcher_range = f'{max_safe} - {max_safe + 1}'
out_range = f'{max_safe + 2} - 20'
elif max_safe == 2:
safe_range = '1'
catcher_range = f'2 - 3'
out_range = '4 - 20'
else:
safe_range = 'None'
catcher_range = f'1 - 2'
out_range = '3 - 20'
return {
'safe_range': safe_range,
'catcher_range': catcher_range,
'out_range': out_range
}
@group_running_calcs.command(name='fly-bq', description='Tag play from third base')
@app_commands.rename(
speed='runner-speed',
arm='outfielder-arm'
)
@commands.has_any_role(SBA_PLAYERS_ROLE_NAME, PD_PLAYERS_ROLE_NAME)
async def running_calcs_flybq(
self, interaction: discord.Interaction, speed: int, arm: int):
await interaction.response.defer()
data = self.play_at_home(speed + 2, arm)
tag_embed = get_team_embed('Flyball B? Running')
tag_embed.add_field(name='Safe Range', value=data['safe_range'])
tag_embed.add_field(name='Block Plate Range', value=data['catcher_range'])
tag_embed.add_field(name='Out Range', value=data['out_range'])
await interaction.edit_original_response(content=None, embed=tag_embed)
@group_running_calcs.command(name='advance', description='Runner advancing on uncapped hit')
@app_commands.rename(
this_of='which-outfielder',
speed='runner-speed',
arm='outfielder-arm',
outs='starting-outs',
held='was-runner-held'
)
@commands.has_any_role(SBA_PLAYERS_ROLE_NAME, PD_PLAYERS_ROLE_NAME)
async def running_calcs_advance(
self, interaction: discord.Interaction, this_of: Literal['LF', 'CF', 'RF'], speed: int, arm: int,
play_type: Literal['lead-runner', 'cutoff-play'],
to_base: Literal['Second Base', 'Third Base', 'Home Plate', 'Fifth Base'], outs: int, held: bool = False):
if to_base == 'Fifth Base':
await interaction.response.send_message(content=random_gif('why are you like this'))
return
await interaction.response.defer()
if to_base == 'Home Plate':
if outs == 2:
speed += 2
if not held:
speed += 1
elif held:
speed -= 1
data = self.play_at_home(speed, arm)
tag_embed = get_team_embed('Play at the Plate')
tag_embed.add_field(name='Safe Range', value=data['safe_range'])
tag_embed.add_field(name='Block Plate Range', value=data['catcher_range'])
tag_embed.add_field(name='Out Range', value=data['out_range'])
await interaction.edit_original_response(content=None, embed=tag_embed)
return
max_safe = speed + arm
if to_base == 'Third Base' and this_of == 'RF':
max_safe += 2
elif to_base == 'Third Base' and this_of == 'LF':
max_safe -= 2
if play_type == 'cutoff-play':
max_safe -= 5
elif play_type == 'lead-runner':
if outs == 2:
max_safe += 2
if not held:
max_safe += 1
elif held:
max_safe -= 1
if max_safe > 20:
max_safe = 19
elif max_safe < 1:
max_safe = 1
if max_safe == 20:
safe_range = '1 - 20'
out_range = 'None'
elif max_safe == 19:
safe_range = f'1 - 19'
out_range = '20'
elif max_safe == 1:
safe_range = '1'
out_range = '2 - 20'
else:
safe_range = f'1 - {max_safe}'
out_range = f'{max_safe + 1} - 20'
run_embed = get_team_embed(f'Play at {to_base}')
run_embed.add_field(name='Safe Range', value=safe_range)
run_embed.add_field(name='Out Range', value=out_range)
await interaction.edit_original_response(content=None, embed=run_embed)
@app_commands.command(name='sba-update-player', description='Crowd-sourcing player updates')
# @app_commands.guilds(discord.Object(id=os.environ.get('GUILD_ID')))
async def update_player_slash(