From 3ea1b0cf5e146b9e2651360c62edd21157d3c30c Mon Sep 17 00:00:00 2001 From: Cal Corum Date: Mon, 17 Jul 2023 23:31:40 -0500 Subject: [PATCH] Add set-keepers command, update draft cog for new api --- cogs/admins.py | 99 ++++++++++++++--- cogs/draft.py | 297 +++++++++++++++++++++++++++++++++---------------- db_calls.py | 9 +- 3 files changed, 292 insertions(+), 113 deletions(-) diff --git a/cogs/admins.py b/cogs/admins.py index 13aad7c..4f35cc9 100644 --- a/cogs/admins.py +++ b/cogs/admins.py @@ -1,10 +1,12 @@ import copy from helpers import * -from db_calls import * +from db_calls import db_get, db_post, patch_player, get_player_by_name +import csv import math import pygsheets +from typing import Optional from discord.ext import commands, tasks from discord import app_commands @@ -14,9 +16,6 @@ class Admins(commands.Cog): def __init__(self, bot): self.bot = bot - # async def cog_command_error(self, ctx, error): - # await ctx.send(f'{error}') - @commands.command(name='current', help='Current db info') @commands.is_owner() async def current_command(self, ctx): @@ -74,17 +73,58 @@ class Admins(commands.Cog): @commands.command(name='test', hidden=True) @commands.is_owner() async def test_command(self, ctx): - # week_num = f'Week {current["week"]}' - # stars = f'{"":*<32}' - # freeze_message = f'```\n' \ - # f'{stars}\n'\ - # f'{week_num: >9} Freeze Period Begins\n' \ - # f'{stars}\n```' - # - # await send_to_channel(self.bot, 'general', freeze_message) + # errors = [] + # with open('storage/s89-injuries.csv') as csv_file: + # csv_reader = csv.reader(csv_file, delimiter=';') + # for row in csv_reader: + # strat_code = row[0] + # inj_rating = row[1] + # logging.info(f'strat_code: {strat_code} / inj_rating: {inj_rating}') + # p_query = await db_get('players', params=[ + # ('season', 8), ('strat_code', strat_code) + # ]) + # if p_query['count'] == 0: + # logging.error(f'Could not find strat_code {strat_code}') + # errors.append(f'**{strat_code}** - {inj_rating} not found') + # else: + # player = p_query['players'][0] + # player['injury_rating'] = inj_rating + # logging.info(f'patching {player["name"]} ({player["strat_code"]}) with injury {inj_rating}') + # await patch_player(player) + + lost = [] + p_query = await db_get('players', params=[('season', 7)]) + for player in p_query['players']: + if player['team']['abbrev'] != 'FA': + pl_query = await db_get('players', params=[('season', 8), ('name', player['name'])]) + if pl_query['count'] > 0: + old_team = player['team'] + if old_team['abbrev'][-3:] == 'MiL': + t_query = await db_get('teams', params=[ + ('season', 8), ('team_abbrev', old_team['abbrev'][:-3]) + ]) + elif old_team['abbrev'][-2:] == 'IL': + t_query = await db_get('teams', params=[ + ('season', 8), ('team_abbrev', old_team['abbrev'][:-2]) + ]) + else: + t_query = await db_get('teams', params=[ + ('season', 8), ('team_abbrev', old_team['abbrev']) + ]) + + new_player = copy.deepcopy(pl_query['players'][0]) + new_player['team'] = t_query['teams'][0] + logging.info(f'Placing {new_player["name"]} on {new_player["team"]["sname"]}') + await patch_player(new_player) + else: + logging.info(f'No season 8 version of {player["name"]} was found') + lost.append(f'- {player["name"]} from {player["team"]["abbrev"]}\n') + + await ctx.send(f'All done!') + if len(lost) > 0: + l_string = "".join(lost) + await ctx.send(f'Here are the lost players:\n\n{l_string}') - current = await db_get('current') - await ctx.send(f'Current: {current}') # @commands.command(name='sendmoves', help='Send moves to sheets') # @commands.is_owner() @@ -180,6 +220,37 @@ class Admins(commands.Cog): await patch_player(player) await ctx.send(random_conf_gif()) + @app_commands.command(name='set-keepers', description='Post final keepers') + @app_commands.guilds(discord.Object(id=os.environ.get('GUILD_ID'))) + @app_commands.checks.has_any_role('Da Commish') + async def keeper_slash( + self, interaction: discord.Interaction, team_abbrev: str, keeper_1_name: str, + keeper_2_name: Optional[str] = None, keeper_3_name: Optional[str] = None, + keeper_4_name: Optional[str] = None, keeper_5_name: Optional[str] = None, + keeper_6_name: Optional[str] = None, keeper_7_name: Optional[str] = None): + await interaction.response.defer() + current = await db_get('current') + this_team = await get_team_by_abbrev(team_abbrev, current['season']) + if this_team is None: + await interaction.edit_original_response(content=f'Team {team_abbrev} not found') + + k_list = [] + for x in [keeper_1_name, keeper_2_name, keeper_3_name, keeper_4_name, keeper_5_name, keeper_6_name, + keeper_7_name]: + if x is not None: + this_player = await get_player_by_name(current['season'], x) + k_list.append({ + 'season': current['season'], + 'team_id': this_team['id'], + 'player_id': this_player['id'] + }) + + resp = await db_post('keepers', payload={ + 'count': len(k_list), + 'keepers': k_list + }) + await interaction.edit_original_response(content=resp) + async def setup(bot): await bot.add_cog(Admins(bot)) diff --git a/cogs/draft.py b/cogs/draft.py index 611f78e..3160450 100644 --- a/cogs/draft.py +++ b/cogs/draft.py @@ -2,7 +2,7 @@ import math import re from helpers import * -from db_calls import * +from db_calls import db_get, db_patch, patch_draftpick, patch_player, db_post, get_player_by_name from discord.ext import commands, tasks from discord import TextChannel, app_commands @@ -15,12 +15,6 @@ class Draft(commands.Cog): self.draft_loop.start() - async def cog_command_error(self, ctx, error): - await ctx.send(f'{error}\n\nRun !help to see the command requirements') - - async def slash_error(self, ctx, error): - await ctx.send(f'{error}') - @tasks.loop(seconds=10) async def draft_loop(self): # guild = self.bot.get_guild(int(os.environ.get('GUILD_ID'))) @@ -28,7 +22,7 @@ class Draft(commands.Cog): # logging.error('Bot not logged in - delaying draft loop') # return - draft_data = await get_draftdata() + draft_data = await db_get('draftdata') now = datetime.datetime.now() # logging.info('Entering draft loop') try: @@ -42,14 +36,24 @@ class Draft(commands.Cog): # Timer is active and pick is due if draft_data['timer'] and deadline: current = await db_get('current') - draft_pick = await get_one_draftpick_byoverall(current['season'], draft_data['currentpick']) + # draft_pick = await get_one_draftpick_byoverall(current['season'], draft_data['currentpick']) + p_query = await db_get('draftpicks', params=[ + ('season', current['season']), ('overall', draft_data['currentpick']) + ]) + if p_query['count'] == 0: + raise ValueError(f'No pick found for overall #{draft_data["currentpick"]}') + draft_pick = p_query['picks'][0] + team_role = get_team_role(None, draft_pick['owner'], self.bot) if deadline <= now: # Auto-draft - team_list = await get_draft_list(draft_pick['owner']) - if len(team_list) > 0: - for x in team_list.values(): + # team_list = await get_draft_list(draft_pick['owner']) + l_query = await db_get('draftlist', params=[ + ('season', current['season']), ('team_id', draft_pick['owner']['id']) + ]) + if l_query['count'] > 0: + for x in l_query['picks']: this_pick = await self.draft_player(current, draft_data, draft_pick, x['player']) if this_pick['success']: break @@ -134,15 +138,22 @@ class Draft(commands.Cog): async def update_timer(self, draft_data): deadline = datetime.datetime.now() + datetime.timedelta(minutes=draft_data['pick_minutes']) - await patch_draftdata(pick_deadline=deadline) + # await patch_draftdata(pick_deadline=deadline) + await db_patch('draftdata', object_id=draft_data['id'], params=[('pick_deadline', deadline)]) async def send_draft_ping(self, ping=True): current = await db_get('current') - draft_data = await get_draftdata() + draft_data = await db_get('draftdata') logging.info(f'current: {current}\nd_data: {draft_data}') - this_pick = await get_one_draftpick_byoverall(current['season'], draft_data['currentpick']) + # this_pick = await get_one_draftpick_byoverall(current['season'], draft_data['currentpick']) + p_query = await db_get('draftpicks', params=[ + ('season', current['season']), ('overall', draft_data['currentpick']) + ]) + if p_query['count'] == 0: + raise ValueError(f'No pick found for overall #{draft_data["currentpick"]}') + this_pick = p_query['picks'][0] logging.info(f'pick: {this_pick}') - this_team = await get_one_team(this_pick['owner']['id']) + this_team = await db_get('teams', object_id=this_pick['owner']['id']) logging.info(f'team: {this_team}') team_role = get_team_role(None, this_team, self.bot) logging.info(f'role: {team_role}') @@ -159,20 +170,27 @@ class Draft(commands.Cog): embed = get_team_embed(f'{this_team["lname"]} On The Clock', team=this_team) embed.description = f'Round {this_pick["round"]} / Pick {pick_num} / Overall {this_pick["overall"]}' - players = await get_players(current['season'], team_abbrev=this_team['abbrev'], sort='wara-desc') - if players: + # players = await get_players(current['season'], team_abbrev=this_team['abbrev'], sort='wara-desc') + p_query = await db_get('players', params=[ + ('season', current['season']), ('team_abbrev', this_team['abbrev']), ('sort', 'cost-desc') + ]) + if p_query['count'] > 0: count = 0 core_players_string = '' - for x in players: + for x in p_query['players']: if count < 5: - core_players_string += f'{players[x]["pos_1"]} {players[x]["name"]} ({players[x]["wara"]})\n' + core_players_string += f'{x["pos_1"]} {x["name"]} ({x["wara"]})\n' + else: + break count += 1 embed.add_field(name='Core Players', value=core_players_string) - roster = await get_team_roster(this_team, 'current') - embed.add_field(name=f'{this_team["sname"]} sWAR', value=f'{roster["active"]["WARa"]:.2f}') + # roster = await get_team_roster(this_team, 'current') + r_query = await db_get(f'teams/{this_team["id"]}/roster/current') + if 'active' in r_query: + embed.add_field(name=f'{this_team["sname"]} sWAR', value=f'{r_query["active"]["WARa"]:.2f}') embed.add_field( name=f'{this_team["abbrev"]} Roster Page', @@ -188,15 +206,18 @@ class Draft(commands.Cog): ) # Last 5 Loop - all_picks = await get_draftpicks( - current['season'], overall_start=this_pick['overall'] - 15, overall_end=this_pick['overall'] - 1 - ) - last_five = dict(sorted(all_picks.items(), key=lambda item: item[1]["overall"], reverse=True)) + # all_picks = await get_draftpicks( + # current['season'], overall_start=this_pick['overall'] - 15, overall_end=this_pick['overall'] - 1 + # ) + # last_five = dict(sorted(all_picks.items(), key=lambda item: item[1]["overall"], reverse=True)) + l_query = await db_get('draftpicks', params=[ + ('season', current['season']), ('sort', 'order-desc'), ('limit', 5) + ]) last_string = '' count = 0 - for x in last_five: - if last_five[x]['player']: - last_string += f'Pick #{last_five[x]["overall"]}: {last_five[x]["player"]["name"]}\n' + for x in l_query['picks']: + if x['player'] is not None: + last_string += f'Pick #{x["overall"]}: {x["player"]["name"]}\n' count += 1 if count >= 5: break @@ -205,15 +226,18 @@ class Draft(commands.Cog): embed.add_field(name='Last 5', value=last_string) # Next 5 Loop - all_picks = await get_draftpicks( - current['season'], overall_start=this_pick['overall'] + 1, overall_end=this_pick['overall'] + 15 - ) - next_five = dict(sorted(all_picks.items(), key=lambda item: item[1]["overall"])) + # all_picks = await get_draftpicks( + # current['season'], overall_start=this_pick['overall'] + 1, overall_end=this_pick['overall'] + 15 + # ) + # next_five = dict(sorted(all_picks.items(), key=lambda item: item[1]["overall"])) + n_query = await db_get('draftpicks', params=[ + ('season', current['season']), ('sort', 'order-asc'), ('limit', 5) + ]) next_string = '' count = 0 - for x in next_five: - if not next_five[x]['player']: - next_string += f'Pick #{next_five[x]["overall"]}: {next_five[x]["owner"]["sname"]}\n' + for x in n_query['picks']: + if x['player'] is not None: + next_string += f'Pick #{x["overall"]}: {x["owner"]["sname"]}\n' count += 1 if count >= 5: break @@ -234,8 +258,14 @@ class Draft(commands.Cog): async def advance_pick(self): current = await db_get('current') - draft_data = await get_draftdata() - draft_pick = await get_one_draftpick_byoverall(current['season'], draft_data['currentpick']) + draft_data = await db_get('draftdata') + # draft_pick = await get_one_draftpick_byoverall(current['season'], draft_data['currentpick']) + p_query = await db_get('draftpicks', params=[ + ('season', current['season']), ('overall', draft_data['currentpick']) + ]) + if p_query['count'] == 0: + raise ValueError(f'No pick found for overall #{draft_data["currentpick"]}') + draft_pick = p_query['picks'][0] if not draft_pick['player']: await send_to_channel( @@ -244,30 +274,42 @@ class Draft(commands.Cog): f'It\'s time to to ***SKIP***. Can I get an F in chat?' ) self.warnings = 0 - await patch_draftdata(currentpick=draft_data['currentpick'] + 1) + # await patch_draftdata(currentpick=draft_data['currentpick'] + 1) + await db_patch('draftdata', object_id=draft_data['id'], params=[('currentpick', draft_data['currentpick'] + 1)]) # Advance the current pick until a selection is possible while True: - draft_data = await get_draftdata() - draft_pick = await get_one_draftpick_byoverall(current['season'], draft_data['currentpick']) + draft_data = await db_get('draftdata') + # draft_pick = await get_one_draftpick_byoverall(current['season'], draft_data['currentpick']) + p_query = await db_get('draftpicks', params=[ + ('season', current['season']), ('overall', draft_data['currentpick']) + ]) + if p_query['count'] == 0: + raise ValueError(f'No pick found for overall #{draft_data["currentpick"]}') + draft_pick = p_query['picks'][0] # Check that selection has been made for current pick, advance if so if not draft_pick: await send_to_channel(self.bot, draft_data['ping_channel'], 'Looks like that is the end of the draft!') - await patch_draftdata(timer=False) + # await patch_draftdata(timer=False) + await db_patch('draftdata', object_id=draft_data['id'], params=[('timer', False)]) return elif draft_pick['player']: - await patch_draftdata(currentpick=draft_data['currentpick'] + 1) + # await patch_draftdata(currentpick=draft_data['currentpick'] + 1) + await db_patch('draftdata', object_id=draft_data['id'], params=[ + ('currentpick', draft_data['currentpick'] + 1) + ]) else: break # If timer is true, set new deadline - draft_data = await get_draftdata() + draft_data = await db_get('draftdata') if draft_data['timer']: await self.update_timer(draft_data) else: deadline = datetime.datetime.now() + datetime.timedelta(days=690) - await patch_draftdata(pick_deadline=deadline) + # await patch_draftdata(pick_deadline=deadline) + await db_patch('draftdata', object_id=draft_data['id'], params=[('pick_deadline', deadline)]) # Post splash screen to ping_channel await self.send_draft_ping() @@ -300,7 +342,8 @@ class Draft(commands.Cog): f'{player["name"]} for free? No? Sorry, I tried.' } - team_roster = await get_team_roster(draft_pick['owner'], 'current') + # team_roster = await get_team_roster(draft_pick['owner'], 'current') + team_roster = await db_get(f'teams/{draft_pick["owner"]["id"]}/roster/current') # Does this team have the cap space to afford this player? max_zeroes = 32 - len(team_roster['active']['players']) @@ -334,20 +377,35 @@ class Draft(commands.Cog): logging.info( f'{draft_pick["owner"]["lname"]} selects {player["name"]} with the #{draft_pick["overall"]} overall pick' ) - await patch_draftpick(draft_pick['id'], player_id=player['id']) - await patch_player(player['id'], team_id=draft_pick['owner']['id'], demotion_week=2) - await post_transactions([{ - 'week': -1, + # await patch_draftpick(draft_pick['id'], player_id=player['id']) + draft_pick['player'] = player + await patch_draftpick(draft_pick) + + player['team'] = draft_pick['owner'] + player['demotion_week'] = 2 + # await patch_player(player['id'], team_id=draft_pick['owner']['id'], demotion_week=2) + await patch_player(player) + + # await post_transactions([{ + # 'week': -1, + # 'player_id': player['id'], + # 'oldteam_id': 201, # FA team ID + # 'newteam_id': draft_pick['owner']['id'], + # 'season': current['season'], + # 'moveid': f'draft-overall-{draft_pick["overall"]}' + # }]) + await db_post('transactions', payload={'count': 1, 'moves': [{ + 'week': 0, 'player_id': player['id'], 'oldteam_id': 201, # FA team ID 'newteam_id': draft_pick['owner']['id'], 'season': current['season'], 'moveid': f'draft-overall-{draft_pick["overall"]}' - }]) + }]}) await send_to_channel( self.bot, draft_data['ping_channel'], - embed=await get_player_embed(await get_one_player(player['id']), current) + embed=await get_player_embed(player, current) ) if player['image2']: embed = get_team_embed(f'{player["name"]}', player["team"], thumbnail=False) @@ -374,7 +432,13 @@ class Draft(commands.Cog): async def draftdata_to_string(self, current, draft_data): try: - draft_pick = await get_one_draftpick_byoverall(current['season'], draft_data['currentpick']) + # draft_pick = await get_one_draftpick_byoverall(current['season'], draft_data['currentpick']) + p_query = await db_get('draftpicks', params=[ + ('season', current['season']), ('overall', draft_data['currentpick']) + ]) + if p_query['count'] == 0: + raise ValueError(f'No pick found for overall #{draft_data["currentpick"]}') + draft_pick = p_query['picks'][0] except Exception as e: logging.error(f'draft cog - Could not get current draft pick: {e}') draft_pick = None @@ -402,7 +466,7 @@ class Draft(commands.Cog): # @commands.is_owner() # async def advance_draft_command(self, ctx): # current = await db_get('current') - # draft_data = await get_draftdata() + # draft_data = await db_get('draftdata') # draft_pick = await get_one_draftpick_byoverall(current['season'], draft_data['currentpick']) # # if draft_pick['player']: @@ -428,29 +492,46 @@ class Draft(commands.Cog): await ctx.send('I don\'t know youuuuuuuuu') return - draft_data = await get_draftdata() - draft_pick = await get_one_draftpick_byoverall(current['season'], draft_data['currentpick']) + draft_data = await db_get('draftdata') + # draft_pick = await get_one_draftpick_byoverall(current['season'], draft_data['currentpick']) + p_query = await db_get('draftpicks', params=[ + ('season', current['season']), ('overall', draft_data['currentpick']) + ]) + if p_query['count'] == 0: + raise ValueError(f'No pick found for overall #{draft_data["currentpick"]}') + draft_pick = p_query['picks'][0] alt_pick_flag = False # Does the current pick belong to this team? if draft_pick['owner'] != team: alt_pick_flag = True # Does this team have any skipped picks? - raw_picks = await get_draftpicks( - current['season'], owner_team=team, round_end=math.ceil(draft_pick['overall'] / 16), round_start=1 - ) - team_picks = dict(sorted(raw_picks.items(), key=lambda item: item[1]["overall"])) - new_pick = None + # raw_picks = await get_draftpicks( + # current['season'], owner_team=team, round_end=math.ceil(draft_pick['overall'] / 16), round_start=1 + # ) + p_query = await db_get('draftpicks', params=[ + ('season', current['season']), ('owner_team_id', team['id']), ('round_start', 1), + ('round_end', math.ceil(draft_pick['overall'] / 16)), ('sort', 'overall-asc') + ]) # TODO: finish updating this query for raw_picks + if p_query['count'] == 0: + raise ValueError(f'Draft picks for {team["abbrev"]} not found') - for x in team_picks: - if not team_picks[x]["player"] and team_picks[x]['overall'] < draft_pick['overall']: - new_pick = await get_one_draftpick_byoverall(current['season'], team_picks[x]['overall']) + new_pick = None + for x in p_query['picks']: + if not x["player"] and x['overall'] < draft_pick['overall']: + # new_pick = await get_one_draftpick_byoverall(current['season'], team_picks[x]['overall']) + p_query = await db_get('draftpicks', params=[ + ('season', current['season']), ('overall', x['overall']) + ]) + if p_query['count'] == 0: + raise ValueError(f'No pick found for overall #{x["overall"]}') + new_pick = p_query['picks'][0] break if new_pick: draft_pick = new_pick else: - mil_team = await get_one_team(f'{team["abbrev"]}MiL') + mil_team = await get_team_by_abbrev(f'{team["abbrev"]}MiL', current['season']) if mil_team == draft_pick['owner']: team = mil_team elif ctx.author.id == self.bot.owner_id and cal_can_pick_for_all: @@ -463,7 +544,7 @@ class Draft(commands.Cog): player_cog = self.bot.get_cog('Players') player_name = await fuzzy_player_search(ctx, ctx.channel, self.bot, name, player_cog.player_list.keys()) - player = await get_one_player(player_name) + player = await get_player_by_name(current['season'], player_name) the_pick = await self.draft_player(current, draft_data, draft_pick, player) if the_pick['success']: @@ -483,10 +564,13 @@ class Draft(commands.Cog): return if not player_list: - team_list = await get_draft_list(team) - if len(team_list) > 0: + # team_list = await get_draft_list(team) + l_query = await db_get('draftlist', params=[ + ('season', current['season']), ('team_id', team['id']) + ]) + if l_query['count'] > 0: list_string = 'Current list:\n' - for x in team_list.values(): + for x in l_query['picks']: list_string += f'{x["rank"]}. {x["player"]["name"]}\n' await ctx.send(list_string) else: @@ -506,7 +590,7 @@ class Draft(commands.Cog): player_cog = self.bot.get_cog('Players') try: player_name = await fuzzy_player_search(ctx, ctx.channel, self.bot, x, player_cog.player_list.keys()) - player = await get_one_player(player_name) + player = await get_player_by_name(current['season'], player_name) except Exception as e: logging.error(f'Could not draft {x} for {team["abbrev"]}: {e}') errors.append(x) @@ -533,13 +617,14 @@ class Draft(commands.Cog): error_string += ', '.join(spelling) await react_and_reply(ctx, '❓', error_string) - await post_draft_list(draft_list) + # await post_draft_list(draft_list) + await db_post('draftlist', payload={'count': len(draft_list), 'draft_list': draft_list}) await ctx.message.add_reaction('✅') @commands.command(name='whomst', aliases=['draftstatus'], help='Get draft status') async def draft_status_command(self, ctx): current = await db_get('current') - draft_data = await get_draftdata() + draft_data = await db_get('draftdata') await ctx.send(await self.draftdata_to_string(current, draft_data)) if draft_data["ping_channel"]: @@ -565,27 +650,32 @@ class Draft(commands.Cog): timer_this_pick: int = None, timer_active: bool = None, wipe_pick: int = None): await interaction.response.defer() current = await db_get('current') - draft_data = await get_draftdata() + draft_data = await db_get('draftdata') pick_deadline = None res_channel_id = None ping_channel_id = None if wipe_pick is not None: - this_pick = await get_one_draftpick_byoverall(current['season'], overall=wipe_pick) + # this_pick = await get_one_draftpick_byoverall(current['season'], overall=wipe_pick) + p_query = await db_get('draftpicks', params=[ + ('season', current['season']), ('overall', wipe_pick) + ]) + if p_query['count'] == 0: + raise ValueError(f'No pick found for overall #{wipe_pick}') + this_pick = p_query['picks'][0] + if not this_pick['player']: await interaction.edit_original_response(content=f'I don\'t see a player taken {wipe_pick} overall.') else: - fa_team = await get_one_team('FA') - await patch_draftpick( - pick_id=this_pick['id'], - player_id=False - ) - await patch_player( - pid=this_pick['player']['id'], - team_id=fa_team['id'] - ) - this_player = await get_one_player(this_pick['player']['id']) + fa_team = await get_team_by_abbrev('FA', current['season']) + this_pick['player'] = None + await patch_draftpick(this_pick) + this_pick['player']['team'] = fa_team + this_player = await patch_player(this_pick['player']) + + # this_player = await get_player_by_name(current['season'], this_pick['player']['id']) + # this_player = await db_get('players', object_id=this_pick['player']['id']) await interaction.edit_original_response( content='Don\'t forget to delete the transaction from the database.', embed=await get_player_embed(this_player, current) @@ -609,21 +699,32 @@ class Draft(commands.Cog): if current_overall is not None and draft_data['timer'] and timer_active is None: pick_deadline = datetime.datetime.now() + datetime.timedelta(minutes=draft_data['pick_minutes']) - await patch_draftdata( - currentpick=current_overall, - timer=timer_active, - pick_deadline=pick_deadline, - result_channel=res_channel_id, - ping_channel=ping_channel_id, - pick_minutes=timer_master - ) + # await patch_draftdata( + # currentpick=current_overall, + # timer=timer_active, + # pick_deadline=pick_deadline, + # result_channel=res_channel_id, + # ping_channel=ping_channel_id, + # pick_minutes=timer_master + # ) + await db_patch('draftdata', object_id=draft_data['id'], params=[ + ('currentpick', current_overall), ('timer', timer_active), ('pick_deadline', pick_deadline), + ('result_channel', res_channel_id), ('ping_channel', ping_channel_id), ('pick_minutes', timer_master) + ]) - draft_data = await get_draftdata() + draft_data = await db_get('draftdata') await interaction.edit_original_response(content=await self.draftdata_to_string(current, draft_data)) if timer_active is True or draft_data['timer']: self.warnings = 0 - draft_pick = await get_one_draftpick_byoverall(current['season'], draft_data['currentpick']) + # draft_pick = await get_one_draftpick_byoverall(current['season'], draft_data['currentpick']) + p_query = await db_get('draftpicks', params=[ + ('season', current['season']), ('overall', wipe_pick) + ]) + if p_query['count'] == 0: + raise ValueError(f'No pick found for overall #{wipe_pick}') + draft_pick = p_query['picks'][0] + if draft_pick['player']: await self.advance_pick() else: @@ -646,7 +747,7 @@ class Draft(commands.Cog): # await ctx.send(f'I cannot find **{channel_mention[0]}** - is that spelled correctly?') # return # - # draft_data = await get_draftdata() + # draft_data = await db_get('draftdata') # current_channel = discord.utils.get(ctx.guild.text_channels, id=draft_data["result_channel"]) # prompt = f'The result channel is currently **{current_channel}** - would you like to set it to ' \ # f'**{this_channel.mention}**?' @@ -672,7 +773,7 @@ class Draft(commands.Cog): # await ctx.send(f'I cannot find **{channel_mention[0]}** - is that spelled correctly?') # return # - # draft_data = await get_draftdata() + # draft_data = await db_get('draftdata') # current_channel = discord.utils.get(ctx.guild.text_channels, id=draft_data["ping_channel"]) # prompt = f'The result channel is currently **{current_channel}** - would you like to set it to ' \ # f'**{this_channel.mention}**?' @@ -690,7 +791,7 @@ class Draft(commands.Cog): # @draft_set_group.command(name='overall', help='Set current pick') # @commands.is_owner() # async def draft_set_overall_command(self, ctx, overall_num: int): - # draft_data = await get_draftdata() + # draft_data = await db_get('draftdata') # prompt = f'The current pick is #**{draft_data["currentpick"]}** - would you like to set it to ' \ # f'#**{overall_num}**?' # @@ -707,7 +808,7 @@ class Draft(commands.Cog): # @draft_set_group.command(name='minutes', help='Set minutes per pick') # @commands.is_owner() # async def draft_set_minutes_command(self, ctx, minutes: int): - # draft_data = await get_draftdata() + # draft_data = await db_get('draftdata') # prompt = f'The current pick time is **{draft_data["pick_minutes"]}** minutes - would you like to set it to ' \ # f'**{minutes}**?' # diff --git a/db_calls.py b/db_calls.py index 30b9aa5..b598c58 100644 --- a/db_calls.py +++ b/db_calls.py @@ -43,7 +43,7 @@ async def db_get(endpoint: str, api_ver: int = 3, object_id: int = None, params: retries = 0 while True: try: - resp = requests.get(req_url, timeout=timeout) + resp = requests.get(req_url, headers=AUTH_TOKEN, timeout=timeout) break except requests.ReadTimeout as e: logging.error(f'Get Timeout: {req_url} / retries: {retries} / timeout: {timeout}') @@ -197,6 +197,13 @@ async def patch_player(this_player: dict): return await db_patch('players', object_id=this_player['id'], params=[], payload=this_player) +async def patch_draftpick(this_pick: dict): + this_pick['player_id'] = None if this_pick['player'] is None else this_pick['player']['id'] + this_pick['origowner_id'] = None if this_pick['origowner'] is None else this_pick['origowner']['id'] + this_pick['owner_id'] = None if this_pick['owner'] is None else this_pick['owner']['id'] + return await db_patch('draftpicks', object_id=this_pick['id'], params=[], payload=this_pick) + + async def get_player_photo(player_name): req_url = f'https://www.thesportsdb.com/api/v1/json/1/searchplayers.php?p={player_name}'