From ae18790279aa5d07d7211308c1ef79567fcc1623 Mon Sep 17 00:00:00 2001 From: Cal Corum Date: Sun, 19 Mar 2023 17:53:59 -0500 Subject: [PATCH] Starting games functional --- ai_manager.py | 2 ++ cogs/admins.py | 8 +++---- cogs/economy.py | 2 +- cogs/gameplay.py | 42 +++++++++++++++++--------------- gauntlets.py | 62 ++++++++++++++++++++++++++++++++++++++++++------ 5 files changed, 85 insertions(+), 31 deletions(-) diff --git a/ai_manager.py b/ai_manager.py index 5ce1cd4..783d396 100644 --- a/ai_manager.py +++ b/ai_manager.py @@ -223,6 +223,8 @@ def build_lineup(team_object: dict, game_id: int, league_name: str, vs_hand: str set_params = MINOR_CARDSET_PARAMS elif league_name == 'major-league': set_params = MAJOR_CARDSET_PARAMS + elif league_name == 'gauntlet-1': + set_params = MINOR_CARDSET_PARAMS # Pull players sorted by current cost try: diff --git a/cogs/admins.py b/cogs/admins.py index bd0b1f0..7f2ca0b 100644 --- a/cogs/admins.py +++ b/cogs/admins.py @@ -7,6 +7,7 @@ import discord import pygsheets import requests +import gauntlets from helpers import * from db_calls import * from discord import Member @@ -278,10 +279,9 @@ class Admins(commands.Cog): # ) # await interaction.edit_original_response(content=f'The choice was: {choice}') - pass - # Delete cards - # Delete packs - # Delete team + await interaction.response.defer() + draft_team = db_get('teams', params=[('abbrev', f'Gauntlet-NCB')]) + await gauntlets.wipe_team(draft_team['teams'][0], interaction) # @commands.command(name='refresh') # @commands.is_owner() diff --git a/cogs/economy.py b/cogs/economy.py index 7c83df8..7a2daba 100644 --- a/cogs/economy.py +++ b/cogs/economy.py @@ -1450,7 +1450,7 @@ class Economy(commands.Cog): values=[[f'{team["id"]}'], [f'\'{team_hash(team)}']] ) - if copy_rosters and team['gsheet'] != 'None': + if copy_rosters and team['gsheet'].lower() != 'none': old_sheet = sheets.open_by_key(team['gsheet']) r_sheet = old_sheet.worksheet_by_title(f'My Rosters') roster_ids = r_sheet.range('B3:B80') diff --git a/cogs/gameplay.py b/cogs/gameplay.py index 409a65b..48bf99d 100644 --- a/cogs/gameplay.py +++ b/cogs/gameplay.py @@ -162,10 +162,10 @@ class Gameplay(commands.Cog): outs = '' game_string = f'```\n' \ - f'{away_team["abbrev"]: ^4}{curr_play.away_score: ^3} {second_base}' \ + f'{away_team["abbrev"].replace("Gauntlet-", ""): ^4}{curr_play.away_score: ^3} {second_base}' \ f'{inning: >10}\n' \ - f'{home_team["abbrev"]: ^4}{curr_play.home_score: ^3} {third_base} {first_base}' \ - f'{outs: >8}\n```' + f'{home_team["abbrev"].replace("Gauntlet-", ""): ^4}{curr_play.home_score: ^3} {third_base} ' \ + f'{first_base}{outs: >8}\n```' return game_string @@ -1368,13 +1368,13 @@ class Gameplay(commands.Cog): except Exception as e: logging.error(f'Failed to run {event_name} draft for the {main_team["sname"]}: {e}') draft_team = db_get('teams', params=[('abbrev', f'Gauntlet-{main_team["abbrev"]}')]) - for x in draft_team['teams']: - db_delete('teams', object_id=x['id']) + await gauntlets.wipe_team(draft_team, interaction) await interaction.channel.send( content=f'Shoot - it looks like we ran into an issue running the draft. I had to clear it all out ' f'for now. I let {get_cal_user(interaction).mention} know what happened so he better ' f'fix it quick.' ) + return await interaction.channel.send( f'Good luck, champ in the making! To start playing, follow these steps:\n\n' @@ -1460,7 +1460,7 @@ class Gameplay(commands.Cog): else: patch_game(this_game.id, home_roster_num=69, ai_team='home') - starter = gauntlets.get_starting_pitcher(opponent, this_game, this_event) + starter = gauntlets.get_starting_pitcher(opponent, this_game, this_event, this_run) all_lineups.append(starter) this_card = db_get(f'cards', object_id=starter['card_id']) @@ -2067,13 +2067,13 @@ class Gameplay(commands.Cog): @app_commands.describe( team_abbrev='The 2- to 4-digit abbreviation for the team being set', roster_num='1, 2, or 3: 1 is Primary, 2 is Secondary, 3 is Tertiary; Enter 1 for AI team', - lineup_num='1 or 2: 1 is top lineup in sheet, 2 is bottom; Enter 1 for AI team', + lineup_num='Technically not a number anymore, huh?', sp_card_id='Light gray number to the left of the pitcher\'s name on your depth chart' ) @app_commands.checks.has_any_role(PD_PLAYERS_ROLE_NAME) async def read_lineup_command( self, interaction: discord.Interaction, team_abbrev: str, roster_num: Literal[1, 2, 3], - lineup_num: Literal[1, 2], sp_card_id: int): + lineup_num: Literal['v Right', 'v Left'], sp_card_id: int): this_game = get_one_game(channel_id=interaction.channel_id, active=True) if not this_game: await interaction.response.send_message(f'I dont\'t see an active game in this channel!') @@ -2085,9 +2085,12 @@ class Gameplay(commands.Cog): return owner_team = await get_game_team(this_game, interaction.user.id) - lineup_team = await get_game_team(this_game, team_abbrev=team_abbrev) + if 'gauntlet' in this_game.game_type: + lineup_team = await get_game_team(this_game, team_abbrev=f'Gauntlet-{owner_team["abbrev"]}') + else: + lineup_team = await get_game_team(this_game, team_abbrev=team_abbrev) - if not owner_team['id'] in [this_game.away_team_id, this_game.home_team_id]: + if owner_team['gmid'] != lineup_team['gmid']: await interaction.response.send_message('Bruh. Only GMs of the active teams can set lineups.') return if not lineup_team['id'] in [this_game.away_team_id, this_game.home_team_id]: @@ -2104,12 +2107,11 @@ class Gameplay(commands.Cog): return await interaction.response.send_message(f'Let\'s put this lineup card together...') - lineup_cells = get_roster_lineups( - lineup_team, - self.bot, - roster_num, - lineup_num if not lineup_team['is_ai'] else 1 - ) + if lineup_num == 'v Right': + l_num = 1 + else: + l_num = 2 + lineup_cells = get_roster_lineups(lineup_team, self.bot, roster_num, l_num) all_lineups = [] all_pos = [] @@ -2323,14 +2325,16 @@ class Gameplay(commands.Cog): this_game = get_one_game(channel_id=interaction.channel.id, active=True) if not this_game: - await interaction.response.send_message('I don\'t see a game in this channel.') + await interaction.edit_original_response(content='I don\'t see a game in this channel.') return False, False, False owner_team = await get_game_team(this_game, interaction.user.id) + if 'gauntlet' in this_game.game_type: + owner_team = await get_game_team(this_game, team_abbrev=f'Gauntlet-{owner_team["abbrev"]}') if not owner_team['id'] in [this_game.away_team_id, this_game.home_team_id]: logging.info(f'{interaction.user.display_name} tried to run a command in Game {this_game.id} when they ' f'aren\'t a GM in the game.') - await interaction.response.send_message('Bruh. Only GMs of the active teams can log plays.') + await interaction.edit_original_response(content='Bruh. Only GMs of the active teams can log plays.') # return this_game, False, False this_play = get_current_play(this_game.id) @@ -2348,7 +2352,7 @@ class Gameplay(commands.Cog): if not this_play.pitcher: logging.info(f'{interaction.user.display_name} tried to run a command in Game {this_game.id} without a ' f'pitcher in the lineup.') - await interaction.response.send_message(f'Please sub in a pitcher before logging a new play.') + await interaction.edit_original_response(content=f'Please sub in a pitcher before logging a new play.') this_play = None return this_game, owner_team, this_play diff --git a/gauntlets.py b/gauntlets.py index 095d0bf..3ec197e 100644 --- a/gauntlets.py +++ b/gauntlets.py @@ -8,8 +8,34 @@ from peewee import DatabaseError import ai_manager import helpers -from helpers import RARITY -from db_calls import db_get, db_post +from helpers import RARITY, get_cal_user +from db_calls import db_get, db_post, db_delete + + +async def wipe_team(this_team, interaction: discord.Interaction): + await interaction.edit_original_response(content=f'Looking for cards...') + # Delete cards + c_query = db_get('cards', params=[('team_id', this_team['id'])]) + await interaction.edit_original_response(content=f'Found {c_query["count"]} cards; deleting cards...') + for x in c_query['cards']: + db_delete('cards', object_id=x['id']) + + # Delete packs + await interaction.edit_original_response(content=f'Done deleting cards; searching for packs...') + p_query = db_get('packs', params=[('team_id', this_team['id'])]) + await interaction.edit_original_response(content=f'Found {p_query["count"]} packs; deleting packs...') + for x in p_query['packs']: + db_delete('packs', object_id=x['id']) + + # Delete team + await interaction.edit_original_response(content=f'Done deleting packs; now deleting team...') + db_delete('teams', object_id=this_team['id']) + await interaction.edit_original_response(content=f'Team is deleted; now finding the run...') + + r_query = db_get('gauntletruns', params=[('team_id', this_team['id']), ('is_active', True)]) + await interaction.edit_original_response(content=f'Found {r_query["count"]} runs; deleting now...') + for x in r_query['runs']: + db_delete('gauntletruns', object_id=x['id']) def get_game_code(this_team, this_event, this_run): @@ -29,10 +55,31 @@ def is_home_team(this_team, this_event, this_run): def get_opponent(this_team, this_event, this_run): if this_event['id'] == 1: gp = games_played(this_run) - if gp == 1: - return db_get('teams', object_id=3, none_okay=False) + if gp == 0: + t_id = 20 + elif gp == 1: + t_id = 9 + elif gp == 2: + t_id = 5 + elif gp == 3: + t_id = 17 + elif gp == 4: + t_id = 3 + elif gp == 5: + t_id = 21 + elif gp == 6: + t_id = 24 + elif gp == 7: + t_id = 23 + elif gp == 8: + t_id = 18 + elif gp == 9: + t_id = 11 + elif gp == 10: + t_id = 14 else: - return db_get('teams', object_id=19, none_okay=False) + raise KeyError(f'Huh...I have no idea who you should be playing right now.') + return db_get('teams', object_id=t_id, none_okay=False) else: return None @@ -44,7 +91,7 @@ def build_lineup(this_team, this_game, this_event): raise KeyError(f'Lineups not found for Gauntlet {this_event["id"]}') -def get_starting_pitcher(this_team, this_game, this_event): +def get_starting_pitcher(this_team, this_game, this_event, this_run): if this_event['id'] == 1: set_params = ai_manager.MINOR_CARDSET_PARAMS params = [ @@ -68,7 +115,8 @@ def get_starting_pitcher(this_team, this_game, this_event): if pitchers['count'] == 0: raise DatabaseError(f'Could not find any SP for {this_team["abbrev"]}. Seems like a Cal issue.') - card_id = ai_manager.get_or_create_card(pitchers['players'][0], this_team) + pitcher_num = games_played(this_run) % 5 + card_id = ai_manager.get_or_create_card(pitchers['players'][pitcher_num], this_team) return { 'game_id': this_game.id,