Add set-keepers command, update draft cog for new api
This commit is contained in:
parent
6ed2f43421
commit
3ea1b0cf5e
@ -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))
|
||||
|
||||
297
cogs/draft.py
297
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 <command_name> 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}**?'
|
||||
#
|
||||
|
||||
@ -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}'
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user