diff --git a/cogs/economy_new/packs.py b/cogs/economy_new/packs.py index 619bbf3..2bb8cbe 100644 --- a/cogs/economy_new/packs.py +++ b/cogs/economy_new/packs.py @@ -1,4 +1,4 @@ -# Economy Packs Module +# Economy Packs Module # Contains pack opening, daily rewards, and donation commands from the original economy.py import logging @@ -9,97 +9,135 @@ import datetime # Import specific utilities needed by this module import random -from api_calls import db_get, db_post, db_patch +from api_calls import db_get, db_post from helpers.constants import PD_PLAYERS_ROLE_NAME, PD_PLAYERS, IMAGES from helpers import ( - get_team_by_owner, display_cards, give_packs, legal_channel, get_channel, - get_cal_user, refresh_sheet, roll_for_cards, int_timestamp, get_context_user + get_team_by_owner, + display_cards, + give_packs, + legal_channel, + get_channel, + get_cal_user, + refresh_sheet, + roll_for_cards, + int_timestamp, + get_context_user, ) -from helpers.discord_utils import get_team_embed, send_to_channel, get_emoji +from helpers.discord_utils import get_team_embed, get_emoji from discord_ui import SelectView, SelectOpenPack -logger = logging.getLogger('discord_app') +logger = logging.getLogger("discord_app") class Packs(commands.Cog): """Pack management, daily rewards, and donation system for Paper Dynasty.""" - + def __init__(self, bot): self.bot = bot - @commands.hybrid_group(name='donation', help='Mod: Give packs for PD donations') + @commands.hybrid_group(name="donation", help="Mod: Give packs for PD donations") @commands.has_any_role(PD_PLAYERS_ROLE_NAME) async def donation(self, ctx: commands.Context): if ctx.invoked_subcommand is None: - await ctx.send('To buy packs, visit https://ko-fi.com/manticorum/shop and include your discord username!') + await ctx.send( + "To buy packs, visit https://ko-fi.com/manticorum/shop and include your discord username!" + ) - @donation.command(name='premium', help='Mod: Give premium packs', aliases=['p', 'prem']) + @donation.command( + name="premium", help="Mod: Give premium packs", aliases=["p", "prem"] + ) async def donation_premium(self, ctx: commands.Context, num_packs: int, gm: Member): if ctx.author.id != self.bot.owner_id: - await ctx.send('Wait a second. You\'re not in charge here!') + await ctx.send("Wait a second. You're not in charge here!") return team = await get_team_by_owner(gm.id) - p_query = await db_get('packtypes', params=[('name', 'Premium')]) - if p_query['count'] == 0: - await ctx.send('Oof. I couldn\'t find a Premium Pack') + p_query = await db_get("packtypes", params=[("name", "Premium")]) + if p_query["count"] == 0: + await ctx.send("Oof. I couldn't find a Premium Pack") return - total_packs = await give_packs(team, num_packs, pack_type=p_query['packtypes'][0]) - await ctx.send(f'The {team["lname"]} now have {total_packs["count"]} total packs!') + total_packs = await give_packs( + team, num_packs, pack_type=p_query["packtypes"][0] + ) + await ctx.send( + f"The {team['lname']} now have {total_packs['count']} total packs!" + ) - @donation.command(name='standard', help='Mod: Give standard packs', aliases=['s', 'sta']) - async def donation_standard(self, ctx: commands.Context, num_packs: int, gm: Member): + @donation.command( + name="standard", help="Mod: Give standard packs", aliases=["s", "sta"] + ) + async def donation_standard( + self, ctx: commands.Context, num_packs: int, gm: Member + ): if ctx.author.id != self.bot.owner_id: - await ctx.send('Wait a second. You\'re not in charge here!') + await ctx.send("Wait a second. You're not in charge here!") return team = await get_team_by_owner(gm.id) - p_query = await db_get('packtypes', params=[('name', 'Standard')]) - if p_query['count'] == 0: - await ctx.send('Oof. I couldn\'t find a Standard Pack') + p_query = await db_get("packtypes", params=[("name", "Standard")]) + if p_query["count"] == 0: + await ctx.send("Oof. I couldn't find a Standard Pack") return - total_packs = await give_packs(team, num_packs, pack_type=p_query['packtypes'][0]) - await ctx.send(f'The {team["lname"]} now have {total_packs["count"]} total packs!') + total_packs = await give_packs( + team, num_packs, pack_type=p_query["packtypes"][0] + ) + await ctx.send( + f"The {team['lname']} now have {total_packs['count']} total packs!" + ) - @commands.hybrid_command(name='lastpack', help='Replay your last pack') + @commands.hybrid_command(name="lastpack", help="Replay your last pack") @commands.check(legal_channel) @commands.has_any_role(PD_PLAYERS_ROLE_NAME) async def last_pack_command(self, ctx: commands.Context): team = await get_team_by_owner(get_context_user(ctx).id) if not team: - await ctx.send(f'I don\'t see a team for you, yet. You can sign up with the `/newteam` command!') + await ctx.send( + "I don't see a team for you, yet. You can sign up with the `/newteam` command!" + ) return p_query = await db_get( - 'packs', - params=[('opened', True), ('team_id', team['id']), ('new_to_old', True), ('limit', 1)] + "packs", + params=[ + ("opened", True), + ("team_id", team["id"]), + ("new_to_old", True), + ("limit", 1), + ], ) - if not p_query['count']: - await ctx.send(f'I do not see any packs for you, bub.') + if not p_query["count"]: + await ctx.send("I do not see any packs for you, bub.") return - pack_name = p_query['packs'][0]['pack_type']['name'] - if pack_name == 'Standard': - pack_cover = IMAGES['pack-sta'] - elif pack_name == 'Premium': - pack_cover = IMAGES['pack-pre'] + pack_name = p_query["packs"][0]["pack_type"]["name"] + if pack_name == "Standard": + pack_cover = IMAGES["pack-sta"] + elif pack_name == "Premium": + pack_cover = IMAGES["pack-pre"] else: pack_cover = None - c_query = await db_get( - 'cards', - params=[('pack_id', p_query['packs'][0]['id'])] - ) - if not c_query['count']: - await ctx.send(f'Hmm...I didn\'t see any cards in that pack.') + c_query = await db_get("cards", params=[("pack_id", p_query["packs"][0]["id"])]) + if not c_query["count"]: + await ctx.send("Hmm...I didn't see any cards in that pack.") return - await display_cards(c_query['cards'], team, ctx.channel, ctx.author, self.bot, pack_cover=pack_cover) + await display_cards( + c_query["cards"], + team, + ctx.channel, + ctx.author, + self.bot, + pack_cover=pack_cover, + ) - @app_commands.command(name='comeonmanineedthis', description='Daily check-in for cards, currency, and packs') + @app_commands.command( + name="comeonmanineedthis", + description="Daily check-in for cards, currency, and packs", + ) @commands.has_any_role(PD_PLAYERS) @commands.check(legal_channel) async def daily_checkin(self, interaction: discord.Interaction): @@ -107,97 +145,127 @@ class Packs(commands.Cog): team = await get_team_by_owner(interaction.user.id) if not team: 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="I don't see a team for you, yet. You can sign up with the `/newteam` command!" ) return - current = await db_get('current') + current = await db_get("current") now = datetime.datetime.now() - midnight = int_timestamp(datetime.datetime(now.year, now.month, now.day, 0, 0, 0)) - daily = await db_get('rewards', params=[ - ('name', 'Daily Check-in'), ('team_id', team['id']), ('created_after', midnight) - ]) - logger.debug(f'midnight: {midnight} / now: {int_timestamp(now)}') - logger.debug(f'daily_return: {daily}') + midnight = int_timestamp( + datetime.datetime(now.year, now.month, now.day, 0, 0, 0) + ) + daily = await db_get( + "rewards", + params=[ + ("name", "Daily Check-in"), + ("team_id", team["id"]), + ("created_after", midnight), + ], + ) + logger.debug(f"midnight: {midnight} / now: {int_timestamp(now)}") + logger.debug(f"daily_return: {daily}") if daily: await interaction.edit_original_response( - content=f'Looks like you already checked in today - come back at midnight Central!' + content="Looks like you already checked in today - come back at midnight Central!" ) return - await db_post('rewards', payload={ - 'name': 'Daily Check-in', 'team_id': team['id'], 'season': current['season'], 'week': current['week'], - 'created': int_timestamp(now) - }) - current = await db_get('current') - check_ins = await db_get('rewards', params=[ - ('name', 'Daily Check-in'), ('team_id', team['id']), ('season', current['season']) - ]) + await db_post( + "rewards", + payload={ + "name": "Daily Check-in", + "team_id": team["id"], + "season": current["season"], + "week": current["week"], + "created": int_timestamp(now), + }, + ) + current = await db_get("current") + check_ins = await db_get( + "rewards", + params=[ + ("name", "Daily Check-in"), + ("team_id", team["id"]), + ("season", current["season"]), + ], + ) - check_count = check_ins['count'] % 5 + check_count = check_ins["count"] % 5 # 2nd, 4th, and 5th check-ins if check_count == 0 or check_count % 2 == 0: # Every fifth check-in if check_count == 0: greeting = await interaction.edit_original_response( - content=f'Hey, you just earned a Standard pack of cards!' + content="Hey, you just earned a Standard pack of cards!" ) - pack_channel = get_channel(interaction, 'pack-openings') + pack_channel = get_channel(interaction, "pack-openings") - p_query = await db_get('packtypes', params=[('name', 'Standard')]) + p_query = await db_get("packtypes", params=[("name", "Standard")]) if not p_query: await interaction.edit_original_response( - content=f'I was not able to pull this pack for you. ' - f'Maybe ping {get_cal_user(interaction).mention}?' + content=f"I was not able to pull this pack for you. " + f"Maybe ping {get_cal_user(interaction).mention}?" ) return # Every second and fourth check-in else: greeting = await interaction.edit_original_response( - content=f'Hey, you just earned a player card!' + content="Hey, you just earned a player card!" ) pack_channel = interaction.channel - p_query = await db_get('packtypes', params=[('name', 'Check-In Player')]) + p_query = await db_get( + "packtypes", params=[("name", "Check-In Player")] + ) if not p_query: await interaction.edit_original_response( - content=f'I was not able to pull this card for you. ' - f'Maybe ping {get_cal_user(interaction).mention}?' + content=f"I was not able to pull this card for you. " + f"Maybe ping {get_cal_user(interaction).mention}?" ) return - await give_packs(team, 1, p_query['packtypes'][0]) + await give_packs(team, 1, p_query["packtypes"][0]) p_query = await db_get( - 'packs', - params=[('opened', False), ('team_id', team['id']), ('new_to_old', True), ('limit', 1)] + "packs", + params=[ + ("opened", False), + ("team_id", team["id"]), + ("new_to_old", True), + ("limit", 1), + ], ) - if not p_query['count']: + if not p_query["count"]: await interaction.edit_original_response( - content=f'I do not see any packs in here. {await get_emoji(interaction, "ConfusedPsyduck")}') + content=f"I do not see any packs in here. {await get_emoji(interaction, 'ConfusedPsyduck')}" + ) return - pack_ids = await roll_for_cards(p_query['packs'], extra_val=check_ins['count']) + pack_ids = await roll_for_cards( + p_query["packs"], extra_val=check_ins["count"] + ) if not pack_ids: await greeting.edit( - content=f'I was not able to create these cards {await get_emoji(interaction, "slight_frown")}' + content=f"I was not able to create these cards {await get_emoji(interaction, 'slight_frown')}" ) return all_cards = [] for p_id in pack_ids: - new_cards = await db_get('cards', params=[('pack_id', p_id)]) - all_cards.extend(new_cards['cards']) + new_cards = await db_get("cards", params=[("pack_id", p_id)]) + all_cards.extend(new_cards["cards"]) if not all_cards: await interaction.edit_original_response( - content=f'I was not able to pull these cards {await get_emoji(interaction, "slight_frown")}' + content=f"I was not able to pull these cards {await get_emoji(interaction, 'slight_frown')}" ) return - await display_cards(all_cards, team, pack_channel, interaction.user, self.bot) + await display_cards( + all_cards, team, pack_channel, interaction.user, self.bot + ) await refresh_sheet(team, self.bot) return @@ -215,87 +283,102 @@ class Packs(commands.Cog): else: m_reward = 25 - team = await db_post(f'teams/{team["id"]}/money/{m_reward}') + team = await db_post(f"teams/{team['id']}/money/{m_reward}") await interaction.edit_original_response( - content=f'You just earned {m_reward}₼! That brings your wallet to {team["wallet"]}₼!') + content=f"You just earned {m_reward}₼! That brings your wallet to {team['wallet']}₼!" + ) - @app_commands.command(name='open-packs', description='Open packs from your inventory') + @app_commands.command( + name="open-packs", description="Open packs from your inventory" + ) @app_commands.checks.has_any_role(PD_PLAYERS) async def open_packs_slash(self, interaction: discord.Interaction): - if interaction.channel.name in ['paper-dynasty-chat', 'pd-news-ticker', 'pd-network-news']: + if interaction.channel.name in [ + "paper-dynasty-chat", + "pd-news-ticker", + "pd-network-news", + ]: await interaction.response.send_message( - f'Please head to down to {get_channel(interaction, "pd-bot-hole")} to run this command.', - ephemeral=True + f"Please head to down to {get_channel(interaction, 'pd-bot-hole')} to run this command.", + ephemeral=True, ) return owner_team = await get_team_by_owner(interaction.user.id) if not owner_team: await interaction.response.send_message( - f'I don\'t see a team for you, yet. You can sign up with the `/newteam` command!' + "I don't see a team for you, yet. You can sign up with the `/newteam` command!" ) return - p_query = await db_get('packs', params=[ - ('team_id', owner_team['id']), ('opened', False) - ]) - if p_query['count'] == 0: + p_query = await db_get( + "packs", params=[("team_id", owner_team["id"]), ("opened", False)] + ) + if p_query["count"] == 0: await interaction.response.send_message( - f'Looks like you are clean out of packs, friendo. You can earn them by playing PD games or by ' - f'donating to the league.' + "Looks like you are clean out of packs, friendo. You can earn them by playing PD games or by " + "donating to the league." ) return + # Pack types that are auto-opened and should not appear in the manual open menu + AUTO_OPEN_TYPES = {"Check-In Player"} + # Group packs by type and customization (e.g. Standard, Standard-Orioles, Standard-2012, Premium) p_count = 0 p_data = { - 'Standard': [], - 'Premium': [], - 'Daily': [], - 'MVP': [], - 'All Star': [], - 'Mario': [], - 'Team Choice': [] + "Standard": [], + "Premium": [], + "Daily": [], + "MVP": [], + "All Star": [], + "Mario": [], + "Team Choice": [], } - logger.debug(f'Parsing packs...') - for pack in p_query['packs']: + logger.debug("Parsing packs...") + for pack in p_query["packs"]: p_group = None - logger.debug(f'pack: {pack}') - logger.debug(f'pack cardset: {pack["pack_cardset"]}') - if pack['pack_team'] is None and pack['pack_cardset'] is None: - p_group = pack['pack_type']['name'] + logger.debug(f"pack: {pack}") + logger.debug(f"pack cardset: {pack['pack_cardset']}") + if pack["pack_type"]["name"] in AUTO_OPEN_TYPES: + logger.debug( + f"Skipping auto-open pack type: {pack['pack_type']['name']}" + ) + continue + if pack["pack_team"] is None and pack["pack_cardset"] is None: + p_group = pack["pack_type"]["name"] # Add to p_data if this is a new pack type if p_group not in p_data: p_data[p_group] = [] - elif pack['pack_team'] is not None: - if pack['pack_type']['name'] == 'Standard': - p_group = f'Standard-Team-{pack["pack_team"]["id"]}-{pack["pack_team"]["sname"]}' - elif pack['pack_type']['name'] == 'Premium': - p_group = f'Premium-Team-{pack["pack_team"]["id"]}-{pack["pack_team"]["sname"]}' - elif pack['pack_type']['name'] == 'Team Choice': - p_group = f'Team Choice-Team-{pack["pack_team"]["id"]}-{pack["pack_team"]["sname"]}' - elif pack['pack_type']['name'] == 'MVP': - p_group = f'MVP-Team-{pack["pack_team"]["id"]}-{pack["pack_team"]["sname"]}' + elif pack["pack_team"] is not None: + if pack["pack_type"]["name"] == "Standard": + p_group = f"Standard-Team-{pack['pack_team']['id']}-{pack['pack_team']['sname']}" + elif pack["pack_type"]["name"] == "Premium": + p_group = f"Premium-Team-{pack['pack_team']['id']}-{pack['pack_team']['sname']}" + elif pack["pack_type"]["name"] == "Team Choice": + p_group = f"Team Choice-Team-{pack['pack_team']['id']}-{pack['pack_team']['sname']}" + elif pack["pack_type"]["name"] == "MVP": + p_group = f"MVP-Team-{pack['pack_team']['id']}-{pack['pack_team']['sname']}" - if pack['pack_cardset'] is not None: - p_group += f'-Cardset-{pack["pack_cardset"]["id"]}' + if pack["pack_cardset"] is not None: + p_group += f"-Cardset-{pack['pack_cardset']['id']}" - elif pack['pack_cardset'] is not None: - if pack['pack_type']['name'] == 'Standard': - p_group = f'Standard-Cardset-{pack["pack_cardset"]["id"]}-{pack["pack_cardset"]["name"]}' - elif pack['pack_type']['name'] == 'Premium': - p_group = f'Premium-Cardset-{pack["pack_cardset"]["id"]}-{pack["pack_cardset"]["name"]}' - elif pack['pack_type']['name'] == 'Team Choice': - p_group = f'Team Choice-Cardset-{pack["pack_cardset"]["id"]}-{pack["pack_cardset"]["name"]}' - elif pack['pack_type']['name'] == 'All Star': - p_group = f'All Star-Cardset-{pack["pack_cardset"]["id"]}-{pack["pack_cardset"]["name"]}' - elif pack['pack_type']['name'] == 'MVP': - p_group = f'MVP-Cardset-{pack["pack_cardset"]["id"]}-{pack["pack_cardset"]["name"]}' - elif pack['pack_type']['name'] == 'Promo Choice': - p_group = f'Promo Choice-Cardset-{pack["pack_cardset"]["id"]}-{pack["pack_cardset"]["name"]}' + elif pack["pack_cardset"] is not None: + if pack["pack_type"]["name"] == "Standard": + p_group = f"Standard-Cardset-{pack['pack_cardset']['id']}-{pack['pack_cardset']['name']}" + elif pack["pack_type"]["name"] == "Premium": + p_group = f"Premium-Cardset-{pack['pack_cardset']['id']}-{pack['pack_cardset']['name']}" + elif pack["pack_type"]["name"] == "Team Choice": + p_group = f"Team Choice-Cardset-{pack['pack_cardset']['id']}-{pack['pack_cardset']['name']}" + elif pack["pack_type"]["name"] == "All Star": + p_group = f"All Star-Cardset-{pack['pack_cardset']['id']}-{pack['pack_cardset']['name']}" + elif pack["pack_type"]["name"] == "MVP": + p_group = f"MVP-Cardset-{pack['pack_cardset']['id']}-{pack['pack_cardset']['name']}" + elif pack["pack_type"]["name"] == "Promo Choice": + p_group = f"Promo Choice-Cardset-{pack['pack_cardset']['id']}-{pack['pack_cardset']['name']}" - logger.info(f'p_group: {p_group}') + logger.info(f"p_group: {p_group}") if p_group is not None: p_count += 1 if p_group not in p_data: @@ -305,34 +388,41 @@ class Packs(commands.Cog): if p_count == 0: await interaction.response.send_message( - f'Looks like you are clean out of packs, friendo. You can earn them by playing PD games or by ' - f'donating to the league.' + "Looks like you are clean out of packs, friendo. You can earn them by playing PD games or by " + "donating to the league." ) return # Display options and ask which group to open - embed = get_team_embed(f'Unopened Packs', team=owner_team) - embed.description = owner_team['lname'] + embed = get_team_embed("Unopened Packs", team=owner_team) + embed.description = owner_team["lname"] select_options = [] for key in p_data: if len(p_data[key]) > 0: pretty_name = None # Not a specific pack - if '-' not in key: + if "-" not in key: + pretty_name = key + elif "Team" in key: + pretty_name = f"{key.split('-')[0]} - {key.split('-')[3]}" + elif "Cardset" in key: + pretty_name = f"{key.split('-')[0]} - {key.split('-')[3]}" + else: + # Pack type name contains a hyphen (e.g. "Check-In Player") pretty_name = key - elif 'Team' in key: - pretty_name = f'{key.split("-")[0]} - {key.split("-")[3]}' - elif 'Cardset' in key: - pretty_name = f'{key.split("-")[0]} - {key.split("-")[3]}' if pretty_name is not None: - embed.add_field(name=pretty_name, value=f'Qty: {len(p_data[key])}') - select_options.append(discord.SelectOption(label=pretty_name, value=key)) + embed.add_field(name=pretty_name, value=f"Qty: {len(p_data[key])}") + select_options.append( + discord.SelectOption(label=pretty_name, value=key) + ) - view = SelectView(select_objects=[SelectOpenPack(select_options, owner_team)], timeout=15) + view = SelectView( + select_objects=[SelectOpenPack(select_options, owner_team)], timeout=15 + ) await interaction.response.send_message(embed=embed, view=view) async def setup(bot): """Setup function for the Packs cog.""" - await bot.add_cog(Packs(bot)) \ No newline at end of file + await bot.add_cog(Packs(bot)) diff --git a/discord_ui/selectors.py b/discord_ui/selectors.py index 0278945..150753d 100644 --- a/discord_ui/selectors.py +++ b/discord_ui/selectors.py @@ -3,126 +3,148 @@ Discord Select UI components. Contains all Select classes for various team, cardset, and pack selections. """ + import logging import discord from typing import Literal, Optional from helpers.constants import ALL_MLB_TEAMS, IMAGES, normalize_franchise -logger = logging.getLogger('discord_app') +logger = logging.getLogger("discord_app") # Team name to ID mappings AL_TEAM_IDS = { - 'Baltimore Orioles': 3, - 'Boston Red Sox': 4, - 'Chicago White Sox': 6, - 'Cleveland Guardians': 8, - 'Detroit Tigers': 10, - 'Houston Astros': 11, - 'Kansas City Royals': 12, - 'Los Angeles Angels': 13, - 'Minnesota Twins': 17, - 'New York Yankees': 19, - 'Oakland Athletics': 20, - 'Athletics': 20, # Alias for post-Oakland move - 'Seattle Mariners': 24, - 'Tampa Bay Rays': 27, - 'Texas Rangers': 28, - 'Toronto Blue Jays': 29 + "Baltimore Orioles": 3, + "Boston Red Sox": 4, + "Chicago White Sox": 6, + "Cleveland Guardians": 8, + "Detroit Tigers": 10, + "Houston Astros": 11, + "Kansas City Royals": 12, + "Los Angeles Angels": 13, + "Minnesota Twins": 17, + "New York Yankees": 19, + "Oakland Athletics": 20, + "Athletics": 20, # Alias for post-Oakland move + "Seattle Mariners": 24, + "Tampa Bay Rays": 27, + "Texas Rangers": 28, + "Toronto Blue Jays": 29, } NL_TEAM_IDS = { - 'Arizona Diamondbacks': 1, - 'Atlanta Braves': 2, - 'Chicago Cubs': 5, - 'Cincinnati Reds': 7, - 'Colorado Rockies': 9, - 'Los Angeles Dodgers': 14, - 'Miami Marlins': 15, - 'Milwaukee Brewers': 16, - 'New York Mets': 18, - 'Philadelphia Phillies': 21, - 'Pittsburgh Pirates': 22, - 'San Diego Padres': 23, - 'San Francisco Giants': 25, - 'St Louis Cardinals': 26, # Note: constants has 'St Louis Cardinals' not 'St. Louis Cardinals' - 'Washington Nationals': 30 + "Arizona Diamondbacks": 1, + "Atlanta Braves": 2, + "Chicago Cubs": 5, + "Cincinnati Reds": 7, + "Colorado Rockies": 9, + "Los Angeles Dodgers": 14, + "Miami Marlins": 15, + "Milwaukee Brewers": 16, + "New York Mets": 18, + "Philadelphia Phillies": 21, + "Pittsburgh Pirates": 22, + "San Diego Padres": 23, + "San Francisco Giants": 25, + "St Louis Cardinals": 26, # Note: constants has 'St Louis Cardinals' not 'St. Louis Cardinals' + "Washington Nationals": 30, } # Get AL teams from constants AL_TEAMS = [team for team in ALL_MLB_TEAMS.keys() if team in AL_TEAM_IDS] -NL_TEAMS = [team for team in ALL_MLB_TEAMS.keys() if team in NL_TEAM_IDS or team == 'St Louis Cardinals'] +NL_TEAMS = [ + team + for team in ALL_MLB_TEAMS.keys() + if team in NL_TEAM_IDS or team == "St Louis Cardinals" +] # Cardset mappings CARDSET_LABELS_TO_IDS = { - '2022 Season': 3, - '2022 Promos': 4, - '2021 Season': 1, - '2019 Season': 5, - '2013 Season': 6, - '2012 Season': 7, - 'Mario Super Sluggers': 8, - '2023 Season': 9, - '2016 Season': 11, - '2008 Season': 12, - '2018 Season': 13, - '2024 Season': 17, - '2024 Promos': 18, - '1998 Season': 20, - '2025 Season': 24, - '2005 Live': 27, - 'Pokemon - Brilliant Stars': 23 + "2022 Season": 3, + "2022 Promos": 4, + "2021 Season": 1, + "2019 Season": 5, + "2013 Season": 6, + "2012 Season": 7, + "Mario Super Sluggers": 8, + "2023 Season": 9, + "2016 Season": 11, + "2008 Season": 12, + "2018 Season": 13, + "2024 Season": 17, + "2024 Promos": 18, + "1998 Season": 20, + "2025 Season": 24, + "2005 Live": 27, + "Pokemon - Brilliant Stars": 23, } -def _get_team_id(team_name: str, league: Literal['AL', 'NL']) -> int: +def _get_team_id(team_name: str, league: Literal["AL", "NL"]) -> int: """Get team ID from team name and league.""" - if league == 'AL': + if league == "AL": return AL_TEAM_IDS.get(team_name) else: # Handle the St. Louis Cardinals special case - if team_name == 'St. Louis Cardinals': - return NL_TEAM_IDS.get('St Louis Cardinals') + if team_name == "St. Louis Cardinals": + return NL_TEAM_IDS.get("St Louis Cardinals") return NL_TEAM_IDS.get(team_name) class SelectChoicePackTeam(discord.ui.Select): - def __init__(self, which: Literal['AL', 'NL'], team, cardset_id: Optional[int] = None): + def __init__( + self, which: Literal["AL", "NL"], team, cardset_id: Optional[int] = None + ): self.which = which self.owner_team = team self.cardset_id = cardset_id - - if which == 'AL': + + if which == "AL": options = [discord.SelectOption(label=team) for team in AL_TEAMS] else: # Handle St. Louis Cardinals display name - options = [discord.SelectOption(label='St. Louis Cardinals' if team == 'St Louis Cardinals' else team) - for team in NL_TEAMS] - - super().__init__(placeholder=f'Select an {which} team', options=options) + options = [ + discord.SelectOption( + label="St. Louis Cardinals" + if team == "St Louis Cardinals" + else team + ) + for team in NL_TEAMS + ] + + super().__init__(placeholder=f"Select an {which} team", options=options) async def callback(self, interaction: discord.Interaction): # Import here to avoid circular imports from api_calls import db_get, db_patch from helpers import open_choice_pack - + team_id = _get_team_id(self.values[0], self.which) if team_id is None: - raise ValueError(f'Unknown team: {self.values[0]}') + raise ValueError(f"Unknown team: {self.values[0]}") - await interaction.response.edit_message(content=f'You selected the **{self.values[0]}**', view=None) + await interaction.response.edit_message( + content=f"You selected the **{self.values[0]}**", view=None + ) # Get the selected packs params = [ - ('pack_type_id', 8), ('team_id', self.owner_team['id']), ('opened', False), ('limit', 1), - ('exact_match', True) + ("pack_type_id", 8), + ("team_id", self.owner_team["id"]), + ("opened", False), + ("limit", 1), + ("exact_match", True), ] if self.cardset_id is not None: - params.append(('pack_cardset_id', self.cardset_id)) - p_query = await db_get('packs', params=params) - if p_query['count'] == 0: - logger.error(f'open-packs - no packs found with params: {params}') - raise ValueError(f'Unable to open packs') + params.append(("pack_cardset_id", self.cardset_id)) + p_query = await db_get("packs", params=params) + if p_query["count"] == 0: + logger.error(f"open-packs - no packs found with params: {params}") + raise ValueError("Unable to open packs") - this_pack = await db_patch('packs', object_id=p_query['packs'][0]['id'], params=[('pack_team_id', team_id)]) + this_pack = await db_patch( + "packs", + object_id=p_query["packs"][0]["id"], + params=[("pack_team_id", team_id)], + ) await open_choice_pack(this_pack, self.owner_team, interaction, self.cardset_id) @@ -130,104 +152,124 @@ class SelectChoicePackTeam(discord.ui.Select): class SelectOpenPack(discord.ui.Select): def __init__(self, options: list, team: dict): self.owner_team = team - super().__init__(placeholder='Select a Pack Type', options=options) + super().__init__(placeholder="Select a Pack Type", options=options) async def callback(self, interaction: discord.Interaction): # Import here to avoid circular imports from api_calls import db_get from helpers import open_st_pr_packs, open_choice_pack - - logger.info(f'SelectPackChoice - selection: {self.values[0]}') - pack_vals = self.values[0].split('-') - logger.info(f'pack_vals: {pack_vals}') + + logger.info(f"SelectPackChoice - selection: {self.values[0]}") + pack_vals = self.values[0].split("-") + logger.info(f"pack_vals: {pack_vals}") # Get the selected packs - params = [('team_id', self.owner_team['id']), ('opened', False), ('limit', 5), ('exact_match', True)] + params = [ + ("team_id", self.owner_team["id"]), + ("opened", False), + ("limit", 5), + ("exact_match", True), + ] - open_type = 'standard' - if 'Standard' in pack_vals: - open_type = 'standard' - params.append(('pack_type_id', 1)) - elif 'Premium' in pack_vals: - open_type = 'standard' - params.append(('pack_type_id', 3)) - elif 'Daily' in pack_vals: - params.append(('pack_type_id', 4)) - elif 'Promo Choice' in pack_vals: - open_type = 'choice' - params.append(('pack_type_id', 9)) - elif 'MVP' in pack_vals: - open_type = 'choice' - params.append(('pack_type_id', 5)) - elif 'All Star' in pack_vals: - open_type = 'choice' - params.append(('pack_type_id', 6)) - elif 'Mario' in pack_vals: - open_type = 'choice' - params.append(('pack_type_id', 7)) - elif 'Team Choice' in pack_vals: - open_type = 'choice' - params.append(('pack_type_id', 8)) + open_type = "standard" + if "Standard" in pack_vals: + open_type = "standard" + params.append(("pack_type_id", 1)) + elif "Premium" in pack_vals: + open_type = "standard" + params.append(("pack_type_id", 3)) + elif "Daily" in pack_vals: + params.append(("pack_type_id", 4)) + elif "Promo Choice" in pack_vals: + open_type = "choice" + params.append(("pack_type_id", 9)) + elif "MVP" in pack_vals: + open_type = "choice" + params.append(("pack_type_id", 5)) + elif "All Star" in pack_vals: + open_type = "choice" + params.append(("pack_type_id", 6)) + elif "Mario" in pack_vals: + open_type = "choice" + params.append(("pack_type_id", 7)) + elif "Team Choice" in pack_vals: + open_type = "choice" + params.append(("pack_type_id", 8)) else: - raise KeyError(f'Cannot identify pack details: {pack_vals}') + logger.error( + f"Unrecognized pack type in selector: {self.values[0]} (split: {pack_vals})" + ) + await interaction.response.edit_message(view=None) + await interaction.followup.send( + content="This pack type cannot be opened manually. Please contact Cal.", + ephemeral=True, + ) + return # If team isn't already set on team choice pack, make team pack selection now await interaction.response.edit_message(view=None) cardset_id = None # Handle Team Choice packs with no team/cardset assigned - if 'Team Choice' in pack_vals and 'Team' not in pack_vals and 'Cardset' not in pack_vals: + if ( + "Team Choice" in pack_vals + and "Team" not in pack_vals + and "Cardset" not in pack_vals + ): await interaction.followup.send( - content='This Team Choice pack needs to be assigned a team and cardset. ' - 'Please contact an admin to configure this pack.', - ephemeral=True + content="This Team Choice pack needs to be assigned a team and cardset. " + "Please contact Cal to configure this pack.", + ephemeral=True, ) return - elif 'Team Choice' in pack_vals and 'Cardset' in pack_vals: + elif "Team Choice" in pack_vals and "Cardset" in pack_vals: # cardset_id = pack_vals[2] - cardset_index = pack_vals.index('Cardset') + cardset_index = pack_vals.index("Cardset") cardset_id = pack_vals[cardset_index + 1] - params.append(('pack_cardset_id', cardset_id)) - if 'Team' not in pack_vals: + params.append(("pack_cardset_id", cardset_id)) + if "Team" not in pack_vals: view = SelectView( - [SelectChoicePackTeam('AL', self.owner_team, cardset_id), - SelectChoicePackTeam('NL', self.owner_team, cardset_id)], - timeout=30 + [ + SelectChoicePackTeam("AL", self.owner_team, cardset_id), + SelectChoicePackTeam("NL", self.owner_team, cardset_id), + ], + timeout=30, ) await interaction.followup.send( - content='Please select a team for your Team Choice pack:', - view=view + content="Please select a team for your Team Choice pack:", view=view ) return - - params.append(('pack_team_id', pack_vals[pack_vals.index('Team') + 1])) - else: - if 'Team' in pack_vals: - params.append(('pack_team_id', pack_vals[pack_vals.index('Team') + 1])) - if 'Cardset' in pack_vals: - cardset_id = pack_vals[pack_vals.index('Cardset') + 1] - params.append(('pack_cardset_id', cardset_id)) - p_query = await db_get('packs', params=params) - if p_query['count'] == 0: - logger.error(f'open-packs - no packs found with params: {params}') + params.append(("pack_team_id", pack_vals[pack_vals.index("Team") + 1])) + else: + if "Team" in pack_vals: + params.append(("pack_team_id", pack_vals[pack_vals.index("Team") + 1])) + if "Cardset" in pack_vals: + cardset_id = pack_vals[pack_vals.index("Cardset") + 1] + params.append(("pack_cardset_id", cardset_id)) + + p_query = await db_get("packs", params=params) + if p_query["count"] == 0: + logger.error(f"open-packs - no packs found with params: {params}") await interaction.followup.send( - content='Unable to find the selected pack. Please contact an admin.', - ephemeral=True + content="Unable to find the selected pack. Please contact Cal.", + ephemeral=True, ) return # Open the packs try: - if open_type == 'standard': - await open_st_pr_packs(p_query['packs'], self.owner_team, interaction) - elif open_type == 'choice': - await open_choice_pack(p_query['packs'][0], self.owner_team, interaction, cardset_id) + if open_type == "standard": + await open_st_pr_packs(p_query["packs"], self.owner_team, interaction) + elif open_type == "choice": + await open_choice_pack( + p_query["packs"][0], self.owner_team, interaction, cardset_id + ) except Exception as e: - logger.error(f'Failed to open pack: {e}') + logger.error(f"Failed to open pack: {e}") await interaction.followup.send( - content=f'Failed to open pack. Please contact an admin. Error: {str(e)}', - ephemeral=True + content=f"Failed to open pack. Please contact Cal. Error: {str(e)}", + ephemeral=True, ) return @@ -235,275 +277,317 @@ class SelectOpenPack(discord.ui.Select): class SelectPaperdexCardset(discord.ui.Select): def __init__(self): options = [ - discord.SelectOption(label='2005 Live'), - discord.SelectOption(label='2025 Season'), - discord.SelectOption(label='1998 Season'), - discord.SelectOption(label='2024 Season'), - discord.SelectOption(label='2023 Season'), - discord.SelectOption(label='2022 Season'), - discord.SelectOption(label='2022 Promos'), - discord.SelectOption(label='2021 Season'), - discord.SelectOption(label='2019 Season'), - discord.SelectOption(label='2018 Season'), - discord.SelectOption(label='2016 Season'), - discord.SelectOption(label='2013 Season'), - discord.SelectOption(label='2012 Season'), - discord.SelectOption(label='2008 Season'), - discord.SelectOption(label='Mario Super Sluggers') + discord.SelectOption(label="2005 Live"), + discord.SelectOption(label="2025 Season"), + discord.SelectOption(label="1998 Season"), + discord.SelectOption(label="2024 Season"), + discord.SelectOption(label="2023 Season"), + discord.SelectOption(label="2022 Season"), + discord.SelectOption(label="2022 Promos"), + discord.SelectOption(label="2021 Season"), + discord.SelectOption(label="2019 Season"), + discord.SelectOption(label="2018 Season"), + discord.SelectOption(label="2016 Season"), + discord.SelectOption(label="2013 Season"), + discord.SelectOption(label="2012 Season"), + discord.SelectOption(label="2008 Season"), + discord.SelectOption(label="Mario Super Sluggers"), ] - super().__init__(placeholder='Select a Cardset', options=options) + super().__init__(placeholder="Select a Cardset", options=options) async def callback(self, interaction: discord.Interaction): # Import here to avoid circular imports from api_calls import db_get from helpers import get_team_by_owner, paperdex_cardset_embed, embed_pagination - - logger.info(f'SelectPaperdexCardset - selection: {self.values[0]}') + + logger.info(f"SelectPaperdexCardset - selection: {self.values[0]}") cardset_id = CARDSET_LABELS_TO_IDS.get(self.values[0]) if cardset_id is None: - raise ValueError(f'Unknown cardset: {self.values[0]}') + raise ValueError(f"Unknown cardset: {self.values[0]}") - c_query = await db_get('cardsets', object_id=cardset_id, none_okay=False) - await interaction.response.edit_message(content=f'Okay, sifting through your cards...', view=None) + c_query = await db_get("cardsets", object_id=cardset_id, none_okay=False) + await interaction.response.edit_message( + content="Okay, sifting through your cards...", view=None + ) cardset_embeds = await paperdex_cardset_embed( - team=await get_team_by_owner(interaction.user.id), - this_cardset=c_query + team=await get_team_by_owner(interaction.user.id), this_cardset=c_query ) await embed_pagination(cardset_embeds, interaction.channel, interaction.user) class SelectPaperdexTeam(discord.ui.Select): - def __init__(self, which: Literal['AL', 'NL']): + def __init__(self, which: Literal["AL", "NL"]): self.which = which - - if which == 'AL': + + if which == "AL": options = [discord.SelectOption(label=team) for team in AL_TEAMS] else: # Handle St. Louis Cardinals display name - options = [discord.SelectOption(label='St. Louis Cardinals' if team == 'St Louis Cardinals' else team) - for team in NL_TEAMS] - - super().__init__(placeholder=f'Select an {which} team', options=options) + options = [ + discord.SelectOption( + label="St. Louis Cardinals" + if team == "St Louis Cardinals" + else team + ) + for team in NL_TEAMS + ] + + super().__init__(placeholder=f"Select an {which} team", options=options) async def callback(self, interaction: discord.Interaction): # Import here to avoid circular imports from api_calls import db_get from helpers import get_team_by_owner, paperdex_team_embed, embed_pagination - + team_id = _get_team_id(self.values[0], self.which) if team_id is None: - raise ValueError(f'Unknown team: {self.values[0]}') + raise ValueError(f"Unknown team: {self.values[0]}") - t_query = await db_get('teams', object_id=team_id, none_okay=False) - await interaction.response.edit_message(content=f'Okay, sifting through your cards...', view=None) + t_query = await db_get("teams", object_id=team_id, none_okay=False) + await interaction.response.edit_message( + content="Okay, sifting through your cards...", view=None + ) - team_embeds = await paperdex_team_embed(team=await get_team_by_owner(interaction.user.id), mlb_team=t_query) + team_embeds = await paperdex_team_embed( + team=await get_team_by_owner(interaction.user.id), mlb_team=t_query + ) await embed_pagination(team_embeds, interaction.channel, interaction.user) class SelectBuyPacksCardset(discord.ui.Select): - def __init__(self, team: dict, quantity: int, pack_type_id: int, pack_embed: discord.Embed, cost: int): + def __init__( + self, + team: dict, + quantity: int, + pack_type_id: int, + pack_embed: discord.Embed, + cost: int, + ): options = [ - discord.SelectOption(label='2005 Live'), - discord.SelectOption(label='2025 Season'), - discord.SelectOption(label='1998 Season'), - discord.SelectOption(label='Pokemon - Brilliant Stars'), - discord.SelectOption(label='2024 Season'), - discord.SelectOption(label='2023 Season'), - discord.SelectOption(label='2022 Season'), - discord.SelectOption(label='2021 Season'), - discord.SelectOption(label='2019 Season'), - discord.SelectOption(label='2018 Season'), - discord.SelectOption(label='2016 Season'), - discord.SelectOption(label='2013 Season'), - discord.SelectOption(label='2012 Season'), - discord.SelectOption(label='2008 Season') + discord.SelectOption(label="2005 Live"), + discord.SelectOption(label="2025 Season"), + discord.SelectOption(label="1998 Season"), + discord.SelectOption(label="Pokemon - Brilliant Stars"), + discord.SelectOption(label="2024 Season"), + discord.SelectOption(label="2023 Season"), + discord.SelectOption(label="2022 Season"), + discord.SelectOption(label="2021 Season"), + discord.SelectOption(label="2019 Season"), + discord.SelectOption(label="2018 Season"), + discord.SelectOption(label="2016 Season"), + discord.SelectOption(label="2013 Season"), + discord.SelectOption(label="2012 Season"), + discord.SelectOption(label="2008 Season"), ] self.team = team self.quantity = quantity self.pack_type_id = pack_type_id self.pack_embed = pack_embed self.cost = cost - super().__init__(placeholder='Select a Cardset', options=options) + super().__init__(placeholder="Select a Cardset", options=options) async def callback(self, interaction: discord.Interaction): # Import here to avoid circular imports from api_calls import db_post from discord_ui.confirmations import Confirm - - logger.info(f'SelectBuyPacksCardset - selection: {self.values[0]}') + + logger.info(f"SelectBuyPacksCardset - selection: {self.values[0]}") cardset_id = CARDSET_LABELS_TO_IDS.get(self.values[0]) if cardset_id is None: - raise ValueError(f'Unknown cardset: {self.values[0]}') - - if self.values[0] == 'Pokemon - Brilliant Stars': - self.pack_embed.set_image(url=IMAGES['pack-pkmnbs']) + raise ValueError(f"Unknown cardset: {self.values[0]}") - self.pack_embed.description = f'{self.pack_embed.description} - {self.values[0]}' + if self.values[0] == "Pokemon - Brilliant Stars": + self.pack_embed.set_image(url=IMAGES["pack-pkmnbs"]) + + self.pack_embed.description = ( + f"{self.pack_embed.description} - {self.values[0]}" + ) view = Confirm(responders=[interaction.user], timeout=30) await interaction.response.edit_message( - content=None, - embed=self.pack_embed, - view=None + content=None, embed=self.pack_embed, view=None ) question = await interaction.channel.send( - content=f'Your Wallet: {self.team["wallet"]}₼\n' - f'Pack{"s" if self.quantity > 1 else ""} Price: {self.cost}₼\n' - f'After Purchase: {self.team["wallet"] - self.cost}₼\n\n' - f'Would you like to make this purchase?', - view=view + content=f"Your Wallet: {self.team['wallet']}₼\n" + f"Pack{'s' if self.quantity > 1 else ''} Price: {self.cost}₼\n" + f"After Purchase: {self.team['wallet'] - self.cost}₼\n\n" + f"Would you like to make this purchase?", + view=view, ) await view.wait() if not view.value: - await question.edit( - content='Saving that money. Smart.', - view=None - ) + await question.edit(content="Saving that money. Smart.", view=None) return p_model = { - 'team_id': self.team['id'], - 'pack_type_id': self.pack_type_id, - 'pack_cardset_id': cardset_id + "team_id": self.team["id"], + "pack_type_id": self.pack_type_id, + "pack_cardset_id": cardset_id, } - await db_post('packs', payload={'packs': [p_model for x in range(self.quantity)]}) - await db_post(f'teams/{self.team["id"]}/money/-{self.cost}') + await db_post( + "packs", payload={"packs": [p_model for x in range(self.quantity)]} + ) + await db_post(f"teams/{self.team['id']}/money/-{self.cost}") await question.edit( - content=f'{"They are" if self.quantity > 1 else "It is"} all yours! Go rip \'em with `/open-packs`', - view=None + content=f"{'They are' if self.quantity > 1 else 'It is'} all yours! Go rip 'em with `/open-packs`", + view=None, ) class SelectBuyPacksTeam(discord.ui.Select): def __init__( - self, which: Literal['AL', 'NL'], team: dict, quantity: int, pack_type_id: int, pack_embed: discord.Embed, - cost: int): + self, + which: Literal["AL", "NL"], + team: dict, + quantity: int, + pack_type_id: int, + pack_embed: discord.Embed, + cost: int, + ): self.which = which self.team = team self.quantity = quantity self.pack_type_id = pack_type_id self.pack_embed = pack_embed self.cost = cost - - if which == 'AL': + + if which == "AL": options = [discord.SelectOption(label=team) for team in AL_TEAMS] else: # Handle St. Louis Cardinals display name - options = [discord.SelectOption(label='St. Louis Cardinals' if team == 'St Louis Cardinals' else team) - for team in NL_TEAMS] - - super().__init__(placeholder=f'Select an {which} team', options=options) + options = [ + discord.SelectOption( + label="St. Louis Cardinals" + if team == "St Louis Cardinals" + else team + ) + for team in NL_TEAMS + ] + + super().__init__(placeholder=f"Select an {which} team", options=options) async def callback(self, interaction: discord.Interaction): # Import here to avoid circular imports from api_calls import db_post from discord_ui.confirmations import Confirm - + team_id = _get_team_id(self.values[0], self.which) if team_id is None: - raise ValueError(f'Unknown team: {self.values[0]}') + raise ValueError(f"Unknown team: {self.values[0]}") - self.pack_embed.description = f'{self.pack_embed.description} - {self.values[0]}' + self.pack_embed.description = ( + f"{self.pack_embed.description} - {self.values[0]}" + ) view = Confirm(responders=[interaction.user], timeout=30) await interaction.response.edit_message( - content=None, - embed=self.pack_embed, - view=None + content=None, embed=self.pack_embed, view=None ) question = await interaction.channel.send( - content=f'Your Wallet: {self.team["wallet"]}₼\n' - f'Pack{"s" if self.quantity > 1 else ""} Price: {self.cost}₼\n' - f'After Purchase: {self.team["wallet"] - self.cost}₼\n\n' - f'Would you like to make this purchase?', - view=view + content=f"Your Wallet: {self.team['wallet']}₼\n" + f"Pack{'s' if self.quantity > 1 else ''} Price: {self.cost}₼\n" + f"After Purchase: {self.team['wallet'] - self.cost}₼\n\n" + f"Would you like to make this purchase?", + view=view, ) await view.wait() if not view.value: - await question.edit( - content='Saving that money. Smart.', - view=None - ) + await question.edit(content="Saving that money. Smart.", view=None) return p_model = { - 'team_id': self.team['id'], - 'pack_type_id': self.pack_type_id, - 'pack_team_id': team_id + "team_id": self.team["id"], + "pack_type_id": self.pack_type_id, + "pack_team_id": team_id, } - await db_post('packs', payload={'packs': [p_model for x in range(self.quantity)]}) - await db_post(f'teams/{self.team["id"]}/money/-{self.cost}') + await db_post( + "packs", payload={"packs": [p_model for x in range(self.quantity)]} + ) + await db_post(f"teams/{self.team['id']}/money/-{self.cost}") await question.edit( - content=f'{"They are" if self.quantity > 1 else "It is"} all yours! Go rip \'em with `/open-packs`', - view=None + content=f"{'They are' if self.quantity > 1 else 'It is'} all yours! Go rip 'em with `/open-packs`", + view=None, ) class SelectUpdatePlayerTeam(discord.ui.Select): - def __init__(self, which: Literal['AL', 'NL'], player: dict, reporting_team: dict, bot): + def __init__( + self, which: Literal["AL", "NL"], player: dict, reporting_team: dict, bot + ): self.bot = bot self.which = which self.player = player self.reporting_team = reporting_team - - if which == 'AL': + + if which == "AL": options = [discord.SelectOption(label=team) for team in AL_TEAMS] else: # Handle St. Louis Cardinals display name - options = [discord.SelectOption(label='St. Louis Cardinals' if team == 'St Louis Cardinals' else team) - for team in NL_TEAMS] - - super().__init__(placeholder=f'Select an {which} team', options=options) + options = [ + discord.SelectOption( + label="St. Louis Cardinals" + if team == "St Louis Cardinals" + else team + ) + for team in NL_TEAMS + ] + + super().__init__(placeholder=f"Select an {which} team", options=options) async def callback(self, interaction: discord.Interaction): # Import here to avoid circular imports from api_calls import db_patch, db_post from discord_ui.confirmations import Confirm from helpers import player_desc, send_to_channel - + # Check if already assigned - compare against both normalized franchise and full mlbclub normalized_selection = normalize_franchise(self.values[0]) - if normalized_selection == self.player['franchise'] or self.values[0] == self.player['mlbclub']: + if ( + normalized_selection == self.player["franchise"] + or self.values[0] == self.player["mlbclub"] + ): await interaction.response.send_message( - content=f'Thank you for the help, but it looks like somebody beat you to it! ' - f'**{player_desc(self.player)}** is already assigned to the **{self.player["mlbclub"]}**.' + content=f"Thank you for the help, but it looks like somebody beat you to it! " + f"**{player_desc(self.player)}** is already assigned to the **{self.player['mlbclub']}**." ) return view = Confirm(responders=[interaction.user], timeout=15) await interaction.response.edit_message( - content=f'Should I update **{player_desc(self.player)}**\'s team to the **{self.values[0]}**?', - view=None - ) - question = await interaction.channel.send( - content=None, - view=view + content=f"Should I update **{player_desc(self.player)}**'s team to the **{self.values[0]}**?", + view=None, ) + question = await interaction.channel.send(content=None, view=view) await view.wait() if not view.value: await question.edit( - content='That didnt\'t sound right to me, either. Let\'s not touch that.', - view=None + content="That didnt't sound right to me, either. Let's not touch that.", + view=None, ) return else: await question.delete() - await db_patch('players', object_id=self.player['player_id'], params=[ - ('mlbclub', self.values[0]), ('franchise', normalize_franchise(self.values[0])) - ]) - await db_post(f'teams/{self.reporting_team["id"]}/money/25') - await send_to_channel( - self.bot, 'pd-news-ticker', - content=f'{interaction.user.name} just updated **{player_desc(self.player)}**\'s team to the ' - f'**{self.values[0]}**' + await db_patch( + "players", + object_id=self.player["player_id"], + params=[ + ("mlbclub", self.values[0]), + ("franchise", normalize_franchise(self.values[0])), + ], ) - await interaction.channel.send(f'All done!') + await db_post(f"teams/{self.reporting_team['id']}/money/25") + await send_to_channel( + self.bot, + "pd-news-ticker", + content=f"{interaction.user.name} just updated **{player_desc(self.player)}**'s team to the " + f"**{self.values[0]}**", + ) + await interaction.channel.send("All done!") class SelectView(discord.ui.View): @@ -511,4 +595,4 @@ class SelectView(discord.ui.View): super().__init__(timeout=timeout) for x in select_objects: - self.add_item(x) \ No newline at end of file + self.add_item(x)