Add /running-calcs
This commit is contained in:
parent
c21c966caa
commit
1a8f758e84
184
cogs/players.py
184
cogs/players.py
@ -2407,6 +2407,190 @@ class Players(commands.Cog):
|
|||||||
# }
|
# }
|
||||||
# self.rolls.append(this_roll)
|
# 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.command(name='sba-update-player', description='Crowd-sourcing player updates')
|
||||||
# @app_commands.guilds(discord.Object(id=os.environ.get('GUILD_ID')))
|
# @app_commands.guilds(discord.Object(id=os.environ.get('GUILD_ID')))
|
||||||
async def update_player_slash(
|
async def update_player_slash(
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user