Refactor new game checks

Trail batter-runner on uncapped hits
This commit is contained in:
Cal Corum 2024-12-26 14:36:04 -06:00
parent a4bce3cbce
commit 3db25b177a
6 changed files with 155 additions and 60 deletions

View File

@ -11,7 +11,7 @@ import pygsheets
from sqlmodel import or_ from sqlmodel import or_
from api_calls import db_get from api_calls import db_get
from command_logic.logic_gameplay import advance_runners, bunts, chaos, complete_game, doubles, flyballs, frame_checks, get_full_roster_from_sheets, get_lineups_from_sheets, checks_log_interaction, complete_play, get_scorebug_embed, groundballs, hit_by_pitch, homeruns, is_game_over, lineouts, manual_end_game, popouts, read_lineup, show_defense_cards, singles, starting_pitcher_dropdown_view, steals, strikeouts, sub_batter_dropdown_view, triples, undo_play, update_game_settings, walks, xchecks, activate_last_play from command_logic.logic_gameplay import advance_runners, bunts, chaos, complete_game, doubles, flyballs, frame_checks, get_full_roster_from_sheets, get_lineups_from_sheets, checks_log_interaction, complete_play, get_scorebug_embed, groundballs, hit_by_pitch, homeruns, is_game_over, lineouts, manual_end_game, new_game_conflicts, popouts, read_lineup, show_defense_cards, singles, starting_pitcher_dropdown_view, steals, strikeouts, sub_batter_dropdown_view, triples, undo_play, update_game_settings, walks, xchecks, activate_last_play
from dice import ab_roll from dice import ab_roll
from exceptions import GameNotFoundException, GoogleSheetsException, TeamNotFoundException, PlayNotFoundException, GameException, log_exception from exceptions import GameNotFoundException, GoogleSheetsException, TeamNotFoundException, PlayNotFoundException, GameException, log_exception
import gauntlets import gauntlets
@ -166,30 +166,20 @@ class Gameplay(commands.Cog):
await interaction.response.defer() await interaction.response.defer()
with Session(engine) as session: with Session(engine) as session:
conflict = get_channel_game_or_none(session, interaction.channel_id) try:
if conflict is not None: await new_game_conflicts(session, interaction)
await interaction.edit_original_response( except GameException as e:
content=f'Ope. There is already a game going on in this channel. Please wait for it to complete '
f'before starting a new one.'
)
return
if interaction.channel.category is None or interaction.channel.category.name != PUBLIC_FIELDS_CATEGORY_NAME:
await interaction.edit_original_response(
content=f'Why don\'t you head down to one of the Public Fields that way other humans can help if anything pops up?'
)
return return
try: away_team = await get_team_or_none(session, team_abbrev=away_team_abbrev)
away_team = await get_team_or_none(session, team_abbrev=away_team_abbrev) if away_team is None:
except LookupError as e:
await interaction.edit_original_response( await interaction.edit_original_response(
content=f'Hm. I\'m not sure who **{away_team_abbrev}** is - check on that and try again!' content=f'Hm. I\'m not sure who **{away_team_abbrev}** is - check on that and try again!'
) )
return return
try:
home_team = await get_team_or_none(session, team_abbrev=home_team_abbrev) home_team = await get_team_or_none(session, team_abbrev=home_team_abbrev)
except LookupError as e: if home_team is None:
await interaction.edit_original_response( await interaction.edit_original_response(
content=f'Hm. I\'m not sure who **{home_team_abbrev}** is - check on that and try again!' content=f'Hm. I\'m not sure who **{home_team_abbrev}** is - check on that and try again!'
) )
@ -332,35 +322,29 @@ class Gameplay(commands.Cog):
await interaction.response.defer() await interaction.response.defer()
with Session(engine) as session: with Session(engine) as session:
conflict = get_channel_game_or_none(session, interaction.channel_id) try:
if conflict is not None: await new_game_conflicts(session, interaction)
await interaction.edit_original_response( except GameException as e:
content=f'Ope. There is already a game going on in this channel. Please wait for it to complete '
f'before starting a new one.'
)
return
if interaction.channel.category is None or interaction.channel.category.name != PUBLIC_FIELDS_CATEGORY_NAME:
await interaction.edit_original_response(
content=f'Why don\'t you head down to one of the Public Fields that way other humans can help if anything pops up?'
)
return return
main_team = await get_team_or_none( main_team = await get_team_or_none(
session, session,
gm_id=interaction.user.id gm_id=interaction.user.id,
main_team=True
) )
human_team = await get_team_or_none(
session,
gm_id=interaction.user.id,
gauntlet_team=True
)
if not main_team: if not main_team:
await interaction.edit_original_response( await interaction.edit_original_response(
content=f'I don\'t see a team for you, yet. You can sign up with the `/newteam` command!' content=f'I don\'t see a team for you, yet. You can sign up with the `/newteam` command!'
) )
return return
this_team = await get_team_or_none( if not human_team:
session,
team_abbrev=f'Gauntlet-{main_team.abbrev}'
)
if not this_team:
await interaction.edit_original_response( await interaction.edit_original_response(
content=f'I don\'t see an active run for you. You can get started with the `/gauntlets start` command!' content=f'I don\'t see an active run for you. You can get started with the `/gauntlets start` command!'
) )
@ -377,7 +361,7 @@ class Gameplay(commands.Cog):
this_event = e_query['events'][0] this_event = e_query['events'][0]
r_query = await db_get( r_query = await db_get(
'gauntletruns', 'gauntletruns',
params=[('team_id', this_team['id']), ('gauntlet_id', this_event['id']), ('is_active', True)] params=[('team_id', human_team['id']), ('gauntlet_id', this_event['id']), ('is_active', True)]
) )
if r_query['count'] == 0: if r_query['count'] == 0:
@ -392,7 +376,7 @@ class Gameplay(commands.Cog):
else: else:
r_query = await db_get( r_query = await db_get(
'gauntletruns', 'gauntletruns',
params=[('team_id', this_team['id']), ('is_active', True)] params=[('team_id', human_team.id), ('is_active', True)]
) )
if r_query['count'] == 0: if r_query['count'] == 0:
@ -406,22 +390,34 @@ class Gameplay(commands.Cog):
this_event = r_query['runs'][0]['gauntlet'] this_event = r_query['runs'][0]['gauntlet']
# If not new or after draft, create new AI game # If not new or after draft, create new AI game
is_home = gauntlets.is_home_team(this_team, this_event, this_run) is_home = gauntlets.is_home_team(human_team, this_event, this_run)
opponent = await gauntlets.get_opponent(this_team, this_event, this_run) ai_team = await gauntlets.get_opponent(session, human_team, this_event, this_run)
if opponent is None: if ai_team is None:
await interaction.edit_original_response( await interaction.edit_original_response(
content=f'Yike. I\'m not sure who your next opponent is. Plz ping the shit out of Cal!' content=f'Yike. I\'m not sure who your next opponent is. Plz ping the shit out of Cal!'
) )
return return
else: else:
logger.info(f'opponent: {opponent}') logger.info(f'opponent: {ai_team}')
ai_role = await team_role(interaction, ai_team)
human_role = await team_role(interaction, human_team)
away_role = ai_role if is_home else human_role
home_role = human_role if is_home else ai_role
conflict_games = get_active_games_by_team(session, team=human_team)
if len(conflict_games) > 0:
await interaction.edit_original_response(
content=f'Ope. The {human_team.sname} are already playing over in {interaction.guild.get_channel(conflict_games[0].channel_id).mention}'
)
return
current = await db_get('current') current = await db_get('current')
game_code = gauntlets.get_game_code(this_team, this_event, this_run) game_code = gauntlets.get_game_code(human_team, this_event, this_run)
this_game = Game( this_game = Game(
away_team_id=opponent.id if is_home else this_team.id, away_team_id=ai_team.id if is_home else human_team.id,
home_team_id=this_team.id if is_home else opponent.id, home_team_id=human_team.id if is_home else ai_team.id,
channel_id=interaction.channel_id, channel_id=interaction.channel_id,
season=current['season'], season=current['season'],
week=current['week'], week=current['week'],
@ -430,14 +426,79 @@ class Gameplay(commands.Cog):
game_type=game_code game_type=game_code
) )
logger.info( logger.info(
f'Game {this_game.id} between {this_team.abbrev} and {opponent.abbrev} is posted!' f'Game {this_game.id} between {human_team.abbrev} and {ai_team.abbrev} is initializing!'
) )
t_role = await team_role(interaction, main_team)
# Get AI SP
await interaction.edit_original_response(
content=f'{ai_team.gmname} is looking for a Starting Pitcher...'
)
ai_sp_lineup = await get_starting_pitcher(
session,
ai_team,
this_game,
is_home=True if not is_home else False,
league_name=game_code
)
logger.info(f'Chosen SP in Game {this_game.id}: {ai_sp_lineup.player.name_with_desc}')
await interaction.edit_original_response(
content=f'The {ai_team.sname} are starting **{ai_sp_lineup.player.name_with_desc}**:\n\n{ai_sp_lineup.player.pitcher_card_url}'
)
# Get AI Lineup
final_message = await interaction.channel.send(
content=f'{ai_team.gmname} is filling out the {ai_team.sname} lineup card...'
)
logger.info(f'Pulling lineup in Game {this_game.id}')
batter_lineups = await get_starting_lineup(
session,
team=ai_team,
game=this_game,
league_name=game_code,
sp_name=ai_sp_lineup.player.name
)
await interaction.edit_original_response( await interaction.edit_original_response(
content=f'Creating this game for {t_role.mention}:\n{this_game}' content=f'Creating this game for {t_role.mention}:\n{this_game}'
) )
# Check for last game settings
logger.info(f'Checking human team\'s automation preferences...')
g_query = session.exec(select(Game).where(or_(Game.home_team == human_team, Game.away_team == human_team)).order_by(Game.id.desc()).limit(1)).all()
if len(g_query) > 0:
last_game = g_query[0]
this_game.auto_roll = last_game.auto_roll
this_game.roll_buttons = last_game.roll_buttons
logger.info(f'Setting auto_roll to {last_game.auto_roll} and roll_buttons to {last_game.roll_buttons}')
# Commit game and lineups
session.add(this_game)
session.commit()
await final_message.edit(content=f'The {ai_team.sname} lineup is in, pulling in scouting data...')
for batter in batter_lineups:
if batter.position != 'DH':
await get_position(session, batter.card, batter.position)
embed = await get_scorebug_embed(session, this_game)
embed.clear_fields()
embed.add_field(
name=f'{ai_team.abbrev} Lineup',
value=this_game.team_lineup(session, ai_team)
)
# Get pitchers from rosterlinks
done = await get_full_roster_from_sheets(session, interaction, self.sheets, this_game, human_team, 1)
if done:
sp_view = starting_pitcher_dropdown_view(session, this_game, human_team)
await interaction.channel.send(content=f'### {human_team.lname} Starting Pitcher', view=sp_view)
await final_message.edit(
content=f'{away_role.mention} @ {home_role.mention} is set!',
embed=embed
)
# TODO: add new-game exhibition, unlimited, and ranked # TODO: add new-game exhibition, unlimited, and ranked
@commands.command(name='force-endgame', help='Mod: Force a game to end without stats') @commands.command(name='force-endgame', help='Mod: Force a game to end without stats')
@ -527,7 +588,7 @@ class Gameplay(commands.Cog):
return return
this_play = this_game.current_play_or_none(session) this_play = this_game.current_play_or_none(session)
await self.post_play(session, interaction, this_play) await self.post_play(session, interaction, this_play, full_length=include_lineups)
@app_commands.command(name='settings-ingame', description='Change in-game settings') @app_commands.command(name='settings-ingame', description='Change in-game settings')
@app_commands.describe( @app_commands.describe(

View File

@ -14,7 +14,7 @@ from api_calls import db_delete, db_get, db_post
from dice import DTwentyRoll, d_twenty_roll, frame_plate_check, sa_fielding_roll from dice import DTwentyRoll, d_twenty_roll, frame_plate_check, sa_fielding_roll
from exceptions import * from exceptions import *
from helpers import DEFENSE_LITERAL, SBA_COLOR, get_channel from helpers import DEFENSE_LITERAL, SBA_COLOR, get_channel
from in_game.game_helpers import legal_check from in_game.game_helpers import PUBLIC_FIELDS_CATEGORY_NAME, legal_check
from in_game.gameplay_models import BattingCard, Game, Lineup, PositionRating, RosterLink, Team, Play from in_game.gameplay_models import BattingCard, Game, Lineup, PositionRating, RosterLink, Team, Play
from in_game.gameplay_queries import get_available_batters, get_batter_card, get_batting_statline, get_pitching_statline, get_position, get_available_pitchers, get_card_or_none, get_channel_game_or_none, get_db_ready_decisions, get_db_ready_plays, get_game_lineups, get_last_team_play, get_one_lineup, get_player_id_from_dict, get_player_name_from_dict, get_player_or_none, get_sorted_lineups, get_team_or_none, get_players_last_pa, post_game_rewards from in_game.gameplay_queries import get_available_batters, get_batter_card, get_batting_statline, get_pitching_statline, get_position, get_available_pitchers, get_card_or_none, get_channel_game_or_none, get_db_ready_decisions, get_db_ready_plays, get_game_lineups, get_last_team_play, get_one_lineup, get_player_id_from_dict, get_player_name_from_dict, get_player_or_none, get_sorted_lineups, get_team_or_none, get_players_last_pa, post_game_rewards
from in_game.managerai_responses import DefenseResponse from in_game.managerai_responses import DefenseResponse
@ -968,9 +968,10 @@ async def flyballs(session: Session, interaction: discord.Interaction, this_play
ranges_embed = this_of.team.embed ranges_embed = this_of.team.embed
ranges_embed.title = f'Tag Play' ranges_embed.title = f'Tag Play'
ranges_embed.description = f'{this_of.team.abbrev} {this_of.position} {this_of.card.player.name}\'s Throw vs {runner.name}' ranges_embed.description = f'{this_of.team.abbrev} {this_of.position} {this_of.card.player.name}\'s Throw vs {runner.name}'
ranges_embed.add_field(name=f'{this_of.position} Arm', value=f'{"+" if of_rating.arm > 0 else ""}{of_rating.arm}')
ranges_embed.add_field(name=f'Runner Speed', value=runner_lineup.card.batterscouting.battingcard.running) ranges_embed.add_field(name=f'Runner Speed', value=runner_lineup.card.batterscouting.battingcard.running)
ranges_embed.add_field(name=f'{this_of.position} Mod', value=f'{of_mod}', inline=False) ranges_embed.add_field(name=f'{this_of.position} Arm', value=f'{"+" if of_rating.arm > 0 else ""}{of_rating.arm}')
ranges_embed.add_field(name=f'{this_of.position} Mod', value=f'{of_mod}')
ranges_embed.add_field(name='', value='', inline=False)
ranges_embed.add_field(name='Safe Range', value=safe_string) ranges_embed.add_field(name='Safe Range', value=safe_string)
ranges_embed.add_field(name='Hold Range', value=hold_string) ranges_embed.add_field(name='Hold Range', value=hold_string)
ranges_embed.add_field(name='Out Range', value=out_string) ranges_embed.add_field(name='Out Range', value=out_string)
@ -1320,7 +1321,6 @@ async def check_uncapped_advance(session: Session, interaction: discord.Interact
of_rating = await get_position(session, this_card=outfielder.card, position=outfielder.position) of_rating = await get_position(session, this_card=outfielder.card, position=outfielder.position)
c_rating = await get_position(session, this_play.catcher.card, position='C') c_rating = await get_position(session, this_play.catcher.card, position='C')
runner_embed = this_play.batter.team.embed runner_embed = this_play.batter.team.embed
runner_embed.add_field(name=f'{outfielder.position} Arm', value=f'{"+" if of_rating.arm > 0 else ""}{of_rating.arm}')
safe_range = None safe_range = None
@ -1336,6 +1336,7 @@ async def check_uncapped_advance(session: Session, interaction: discord.Interact
lead_runner_embed.title = f'{lead_runner.player.name} To {"Home" if lead_base == 4 else "Third"}' lead_runner_embed.title = f'{lead_runner.player.name} To {"Home" if lead_base == 4 else "Third"}'
lead_runner_embed.description = f'{outfielder.team.abbrev} {outfielder.position} {outfielder.player.name}\'s Throw' lead_runner_embed.description = f'{outfielder.team.abbrev} {outfielder.position} {outfielder.player.name}\'s Throw'
lead_runner_embed.add_field(name=f'Runner Speed', value=lead_runner.card.batterscouting.battingcard.running) lead_runner_embed.add_field(name=f'Runner Speed', value=lead_runner.card.batterscouting.battingcard.running)
lead_runner_embed.add_field(name=f'{outfielder.position} Arm', value=f'{"+" if of_rating.arm > 0 else ""}{of_rating.arm}')
if this_play.starting_outs == 2: if this_play.starting_outs == 2:
logger.info(f'Adding 2 for 2 outs') logger.info(f'Adding 2 for 2 outs')
@ -1353,11 +1354,13 @@ async def check_uncapped_advance(session: Session, interaction: discord.Interact
# Build trail runner embed # Build trail runner embed
trail_runner_embed = copy.deepcopy(runner_embed) trail_runner_embed = copy.deepcopy(runner_embed)
trail_bc = get_batter_card(this_lineup=trail_runner) trail_bc = get_batter_card(this_lineup=trail_runner)
logger.info(f'trail runner batting card: {trail_bc}')
trail_runner_embed.title = f'{trail_runner.player.name} To {"Third" if trail_base == 3 else "Second"}' trail_runner_embed.title = f'{trail_runner.player.name} To {"Third" if trail_base == 3 else "Second"}'
trail_runner_embed.description = f'{outfielder.team.abbrev} {outfielder.position} {outfielder.player.name}\'s Throw' trail_runner_embed.description = f'{outfielder.team.abbrev} {outfielder.position} {outfielder.player.name}\'s Throw'
trail_runner_embed.add_field(name=f'Runner Speed', value=trail_bc.running) trail_runner_embed.add_field(name=f'Runner Speed', value=trail_bc.running)
logger.info(f'trail runner batting card: {trail_bc}') trail_runner_embed.add_field(name=f'{outfielder.position} Arm', value=f'{"+" if of_rating.arm > 0 else ""}{of_rating.arm}')
trail_safe_range = trail_bc.running - 5 + of_rating.arm trail_safe_range = trail_bc.running - 5 + of_rating.arm
logger.info(f'trail_safe_range: {trail_safe_range}') logger.info(f'trail_safe_range: {trail_safe_range}')
@ -1679,6 +1682,10 @@ async def check_uncapped_advance(session: Session, interaction: discord.Interact
logger.info(f'run scored from first') logger.info(f'run scored from first')
this_play.rbi += 1 this_play.rbi += 1
log_run_scored(session, lead_runner, this_play) log_run_scored(session, lead_runner, this_play)
if trail_runner != this_play.batter:
logger.info(f'Trail runner is not batter, advancing batter')
this_play.batter_final += 1
return this_play return this_play
@ -1834,6 +1841,10 @@ async def check_uncapped_advance(session: Session, interaction: discord.Interact
if this_play.on_first_final > 3: if this_play.on_first_final > 3:
this_play.rbi += 1 this_play.rbi += 1
log_run_scored(session, lead_runner, this_play) log_run_scored(session, lead_runner, this_play)
if trail_runner != this_play.batter:
logger.info(f'Trail runner is not batter, advancing batter')
this_play.batter_final += 1
return this_play return this_play
@ -3177,7 +3188,7 @@ async def groundballs(session: Session, interaction: discord.Interaction, this_p
question=f'Was that ball hit to either 2B or SS?', question=f'Was that ball hit to either 2B or SS?',
label_type='yes' label_type='yes'
) )
if not to_mif: if not to_mif:
logger.info(f'Not to a MIF, gb 7') logger.info(f'Not to a MIF, gb 7')
this_play = gb_result_7(session, this_play) this_play = gb_result_7(session, this_play)
@ -3500,3 +3511,19 @@ def gb_result_13(session: Session, this_play: Play):
this_play = gb_result_2(session, this_play) this_play = gb_result_2(session, this_play)
return this_play return this_play
async def new_game_conflicts(session: Session, interaction: discord.Interaction):
conflict = get_channel_game_or_none(session, interaction.channel_id)
if conflict is not None:
await interaction.edit_original_response(
content=f'Ope. There is already a game going on in this channel. Please wait for it to complete '
f'before starting a new one.'
)
log_exception(GameException, f'{interaction.user} attempted to start a new game in {interaction.channel.name}, but there is another active game')
if interaction.channel.category is None or interaction.channel.category.name != PUBLIC_FIELDS_CATEGORY_NAME:
await interaction.edit_original_response(
content=f'Why don\'t you head down to one of the Public Fields that way other humans can help if anything pops up?'
)
log_exception(GameException, f'{interaction.user} attempted to start a new game in {interaction.channel.name} so they were redirected to {PUBLIC_FIELDS_CATEGORY_NAME}')

View File

@ -81,3 +81,7 @@ class InvalidResultException(GameException):
class ButtonOptionNotChosen(Exception): class ButtonOptionNotChosen(Exception):
pass pass
class MissingRoleException(GameException):
pass

View File

@ -215,7 +215,6 @@ async def get_opponent(session: Session, this_team, this_event, this_run) -> Tea
t_id = 25 t_id = 25
else: else:
raise KeyError(f'Hmm...I do not know who you should be playing right now.') raise KeyError(f'Hmm...I do not know who you should be playing right now.')
return await db_get('teams', object_id=t_id, none_okay=False)
elif this_event['id'] == 7: elif this_event['id'] == 7:
if gp == 0: if gp == 0:
t_id = 10 t_id = 10
@ -244,6 +243,8 @@ async def get_opponent(session: Session, this_team, this_event, this_run) -> Tea
else: else:
return None return None
this_team = await get_team_or_none(session, team_id=t_id)
logger.info(f'Gauntlet opponent: {this_team}')
return await get_team_or_none(session, t_id) return await get_team_or_none(session, t_id)

View File

@ -317,6 +317,7 @@ async def get_starting_lineup(session: Session, team: Team, game: Game, league_n
async def get_starting_pitcher( async def get_starting_pitcher(
session: Session, this_team: Team, this_game: Game, is_home: bool, league_name: str) -> Lineup: session: Session, this_team: Team, this_game: Game, is_home: bool, league_name: str) -> Lineup:
d_100 = random.randint(1, 100) d_100 = random.randint(1, 100)
logger.info(f'Getting a {league_name} starting pitcher for the {this_team.lname}; d100: {d_100}')
if is_home: if is_home:
if d_100 <= 30: if d_100 <= 30:
sp_rank = 1 sp_rank = 1
@ -339,6 +340,7 @@ async def get_starting_pitcher(
sp_rank = 4 sp_rank = 4
else: else:
sp_rank = 5 sp_rank = 5
logger.info(f'chosen rank: {sp_rank}')
sp_query = await db_get( sp_query = await db_get(
f'teams/{this_team.id}/sp/{league_name}?sp_rank={sp_rank}{this_game.cardset_param_string}' f'teams/{this_team.id}/sp/{league_name}?sp_rank={sp_rank}{this_game.cardset_param_string}'

View File

@ -60,7 +60,7 @@ def get_active_games_by_team(session: Session, team: Team) -> list[Game]:
async def get_team_or_none( async def get_team_or_none(
session: Session, team_id: int | None = None, gm_id: int | None = None, team_abbrev: str | None = None, skip_cache: bool = False, main_team: bool = None, gauntlet_team: bool = None) -> Team | None: session: Session, team_id: int | None = None, gm_id: int | None = None, team_abbrev: str | None = None, skip_cache: bool = False, main_team: bool = None, gauntlet_team: bool = None, include_packs: bool = False) -> Team | None:
logger.info(f'Getting team or none / team_id: {team_id} / gm_id: {gm_id} / team_abbrev: {team_abbrev} / skip_cache: {skip_cache} / main_team: {main_team} / gauntlet_team: {gauntlet_team}') logger.info(f'Getting team or none / team_id: {team_id} / gm_id: {gm_id} / team_abbrev: {team_abbrev} / skip_cache: {skip_cache} / main_team: {main_team} / gauntlet_team: {gauntlet_team}')
if gm_id is not None: if gm_id is not None:
if main_team is None and gauntlet_team is None: if main_team is None and gauntlet_team is None:
@ -106,18 +106,18 @@ async def get_team_or_none(
return db_team return db_team
if team_id is not None: if team_id is not None:
t_query = await db_get('teams', object_id=team_id, params=[('inc_packs', False)]) t_query = await db_get('teams', object_id=team_id, params=[('inc_packs', include_packs)])
if t_query is not None: if t_query is not None:
return cache_team(t_query) return cache_team(t_query)
elif gm_id is not None: elif gm_id is not None:
t_query = await db_get('teams', params=[('gm_id', gm_id)]) t_query = await db_get('teams', params=[('gm_id', gm_id), ('inc_packs', include_packs)])
if t_query['count'] != 0: if t_query['count'] != 0:
for team in [x for x in t_query['teams'] if 'gauntlet' not in x['abbrev'].lower()]: for team in [x for x in t_query['teams'] if 'gauntlet' not in x['abbrev'].lower()]:
return cache_team(team) return cache_team(team)
elif team_abbrev is not None: elif team_abbrev is not None:
t_query = await db_get('teams', params=[('abbrev', team_abbrev)]) t_query = await db_get('teams', params=[('abbrev', team_abbrev), ('inc_packs', include_packs)])
if t_query['count'] != 0: if t_query['count'] != 0:
if 'gauntlet' in team_abbrev.lower(): if 'gauntlet' in team_abbrev.lower():
return cache_team(t_query['teams'][0]) return cache_team(t_query['teams'][0])