paper-dynasty-discord/gauntlets.py
2024-05-13 15:36:10 -05:00

1687 lines
69 KiB
Python

import copy
import datetime
import logging
import random
import discord
import requests
from peewee import DatabaseError
import ai_manager
import helpers
from helpers import RARITY, get_cal_user, get_or_create_role, send_to_channel, get_channel
from db_calls import db_get, db_post, db_delete, db_patch
async def wipe_team(this_team, interaction: discord.Interaction, delete_team: bool = False, delete_runs: bool = False):
await interaction.edit_original_response(content=f'Looking for cards...')
# Delete cards
c_query = await db_get('cards', params=[('team_id', this_team['id'])])
await interaction.edit_original_response(content=f'Found {c_query["count"]} cards; deleting cards...')
for x in c_query['cards']:
await db_delete('cards', object_id=x['id'])
# Delete packs
await interaction.edit_original_response(content=f'Done deleting cards; searching for packs...')
p_query = await db_get('packs', params=[('team_id', this_team['id'])])
await interaction.edit_original_response(content=f'Found {p_query["count"]} packs; deleting packs...')
for x in p_query['packs']:
await db_delete('packs', object_id=x['id'])
# Delete team
if delete_team:
await interaction.edit_original_response(content=f'Done deleting packs; now deleting team...')
await db_delete('teams', object_id=this_team['id'])
await interaction.edit_original_response(content=f'Team is deleted; now finding the run...')
if delete_runs:
r_query = await db_get('gauntletruns', params=[('team_id', this_team['id']), ('is_active', True)])
await interaction.edit_original_response(content=f'Found {r_query["count"]} runs; deleting now...')
for x in r_query['runs']:
await db_delete('gauntletruns', object_id=x['id'])
def get_game_code(this_team, this_event, this_run):
return f'gauntlet-{this_event["id"]}-run-{this_run["id"]}'
def games_played(this_run):
return this_run['wins'] + this_run['losses']
def is_home_team(this_team, this_event, this_run):
if this_event['id'] in [1, 2]:
return True
return False
async def get_opponent(this_team, this_event, this_run):
gp = games_played(this_run)
if this_event['id'] == 1:
if gp == 0:
t_id = 30
elif gp == 1:
t_id = 12
elif gp == 2:
t_id = 15
elif gp == 3:
t_id = 13
elif gp == 4:
t_id = 6
elif gp == 5:
t_id = 4
elif gp == 6:
t_id = 23
elif gp == 7:
t_id = 16
elif gp == 8:
t_id = 2
elif gp == 9:
t_id = 14
elif gp == 10:
t_id = 58
else:
raise KeyError(f'Huh...I have no idea who you should be playing right now.')
return await db_get('teams', object_id=t_id, none_okay=False)
elif this_event['id'] == 2:
if gp == 0:
t_id = 23
elif gp == 1:
t_id = 15
elif gp == 2:
t_id = 24
elif gp == 3:
t_id = 25
elif gp == 4:
t_id = 18
elif gp == 5:
t_id = 6
elif gp == 6:
t_id = 16
elif gp == 7:
t_id = 2
elif gp == 8:
t_id = 5
elif gp == 9:
t_id = 9
elif gp == 10:
t_id = 28
else:
raise KeyError(f'Huh...I have no idea who you should be playing right now.')
return await db_get('teams', object_id=t_id, none_okay=False)
elif this_event['id'] == 3:
if gp == 0:
t_id = 28
elif gp == 1:
t_id = 7
elif gp == 2:
t_id = 15
elif gp == 3:
t_id = 6
elif gp == 4:
t_id = 21
elif gp == 5:
t_id = 23
elif gp == 6:
t_id = 24
elif gp == 7:
t_id = 13
elif gp == 8:
t_id = 4
elif gp == 9:
t_id = 2
elif gp == 10:
t_id = 19
else:
raise KeyError(f'Huh...I have no idea who you should be playing right now.')
return await db_get('teams', object_id=t_id, none_okay=False)
elif this_event['id'] == 4:
if gp == 0:
t_id = 3
elif gp == 1:
t_id = 1
elif gp == 2:
t_id = 24
elif gp == 3:
t_id = 25
elif gp == 4:
t_id = 21
elif gp == 5:
t_id = 16
elif gp == 6:
t_id = 30
elif gp == 7:
t_id = 29
elif gp == 8:
t_id = 10
elif gp == 9:
t_id = 8
elif gp == 10:
t_id = 79
else:
raise KeyError(f'Hmm...I do not know who you should be playing right now.')
return await db_get('teams', object_id=t_id, none_okay=False)
elif this_event['id'] == 5:
if gp == 0:
t_id = 6
elif gp == 1:
t_id = 15
elif gp == 2:
t_id = 12
elif gp == 3:
t_id = 25
elif gp == 4:
t_id = 26
elif gp == 5:
t_id = 21
elif gp == 6:
t_id = 9
elif gp == 7:
t_id = 30
elif gp == 8:
t_id = 8
elif gp == 9:
t_id = 7
elif gp == 10:
t_id = 19
else:
raise KeyError(f'Hmm...I do not know who you should be playing right now.')
return await db_get('teams', object_id=t_id, none_okay=False)
else:
return None
async def build_lineup(this_team, this_game, this_event, sp_name):
return await ai_manager.build_lineup(this_team, this_game.id, f'gauntlet-{this_event["id"]}', sp_name)
async def get_starting_pitcher(this_team, this_game, this_event, this_run):
sp_rank = (games_played(this_run) % 5) + 1
starter = await db_get(f'teams/{this_team["id"]}/sp/gauntlet-{this_event["id"]}?sp_rank={sp_rank}')
# get player card; create one if none found
card_id = await ai_manager.get_or_create_card(starter, this_team)
return {
'game_id': this_game.id,
'team_id': this_team['id'],
'player_id': starter['player_id'],
'card_id': card_id,
'position': 'P',
'batting_order': 10,
'after_play': 0
}
# if this_event['id'] == 1:
# if this_team['id'] != 58:
# set_params = copy.deepcopy(ai_manager.MINOR_CARDSET_PARAMS)
# else:
# set_params = []
# params = [
# ('mlbclub', this_team['lname']), ('pos_include', 'SP'), ('pos_exclude', 'RP'),
# ('inc_dex', False), ('sort_by', 'cost-desc'), ('limit', 5)
# ]
# params.extend(set_params)
# elif this_event['id'] == 2:
# set_params = copy.deepcopy(ai_manager.GAUNTLET2_PARAMS)
# params = [
# ('mlbclub', this_team['lname']), ('pos_include', 'SP'), ('pos_exclude', 'RP'),
# ('inc_dex', False), ('sort_by', 'cost-desc'), ('limit', 5)
# ]
# params.extend(set_params)
# else:
# raise KeyError(f'Pitcher not found for Gauntlet {this_event["id"]}')
#
# params = [
# ('mlbclub', this_team['lname']), ('pos_include', 'SP'), ('pos_exclude', 'RP'),
# ('inc_dex', False), ('sort_by', 'cost-desc'), ('limit', 5)
# ]
# counter = 0
# while True:
# counter += 1
# # Pull starters sorted by current cost
# try:
# params.extend(set_params)
# pitchers = await db_get(
# endpoint='players',
# params=params,
# timeout=10
# )
# except ConnectionError as e:
# logging.error(f'Could not get pitchers for {this_team["lname"]}: {e}')
# raise ConnectionError(f'Error pulling starting pitchers for the {this_team["lname"]}. Cal help plz.')
#
# if pitchers['count'] == 0:
# logging.info(f'pitchers is None')
# del params
# params = [
# ('mlbclub', this_team['lname']), ('pos_include', 'SP'),
# ('inc_dex', False), ('sort_by', 'cost-desc'), ('limit', 5)
# ]
# elif counter > 2:
# raise KeyError(f'Error pulling pitchers for the {this_team["lname"]}. Cal help plz.')
# else:
# break
#
# pitcher_num = games_played(this_run) % 5
# card_id = await ai_manager.get_or_create_card(pitchers['players'][pitcher_num], this_team)
#
# return {
# 'game_id': this_game.id,
# 'team_id': this_team['id'],
# 'player_id': pitchers['players'][0]['player_id'],
# 'card_id': card_id,
# 'position': 'P',
# 'batting_order': 10,
# 'after_play': 0
# }
async def run_draft(interaction: discord.Interaction, main_team, this_event, draft_team=None):
if this_event['id'] == 1:
embed_title = f'{main_team["lname"]} - {this_event["name"]} Draft'
embed_description = f'{this_event["name"]}'
base_params = copy.deepcopy(ai_manager.MAJOR_CARDSET_PARAMS)
base_params.extend([('limit', 8), ('cardset_id', 8)])
elif this_event['id'] == 2:
embed_title = f'{main_team["lname"]} - {this_event["name"]} Draft'
embed_description = f'{this_event["name"]}'
base_params = copy.deepcopy(ai_manager.GAUNTLET2_PARAMS)
base_params.extend([('limit', 8)])
elif this_event['id'] == 3:
embed_title = f'{main_team["lname"]} - {this_event["name"]} Draft'
embed_description = f'{this_event["name"]}'
base_params = [('cardset_id', 8), ('cardset_id', 13), ('cardset_id', 14), ('cardset_id', 15), ('limit', 8)]
elif this_event['id'] == 4:
embed_title = f'{main_team["lname"]} - {this_event["name"]} Draft'
embed_description = f'{this_event["name"]}'
base_params = [('cardset_id', 3), ('cardset_id', 4), ('cardset_id', 6), ('cardset_id', 16),
('cardset_id', 15), ('limit', 8)]
elif this_event['id'] == 5:
embed_title = f'{main_team["lname"]} - {this_event["name"]} Draft'
embed_description = f'{this_event["name"]}'
base_params = [('cardset_id', 17), ('cardset_id', 18), ('cardset_id', 19), ('cardset_id', 16),
('cardset_id', 8), ('limit', 8)]
else:
logging.error(f'run_draft - Event ID {this_event["id"]} not recognized')
raise KeyError(f'Draft data not found for Gauntlet {this_event["id"]}')
if draft_team is None:
# Post draft team linked to main team
draft_team = await db_post(
'teams',
payload={
'abbrev': f'Gauntlet-{main_team["abbrev"]}',
'sname': main_team['sname'],
'lname': main_team['lname'],
'gmid': main_team['gmid'],
'gmname': main_team['gmname'],
'gsheet': 'NONE',
'logo': main_team['logo'] if main_team['logo'] else None,
'color': main_team['color'] if main_team['color'] else None,
'season': main_team['season'],
'has_guide': main_team['has_guide']
}
)
all_players = []
p_names = []
counts = {
'SP': 0,
'RP': 0,
'CP': 0,
'C': 0,
'1B': 0,
'2B': 0,
'3B': 0,
'SS': 0,
'LF': 0,
'CF': 0,
'RF': 0,
'DH': 0,
'Hall of Fame': 0,
'MVP': 0,
'All-Star': 0,
'Starter': 0,
'Reserve': 0,
'Replacement': 0,
}
max_counts = {
'Hall of Fame': 1,
'MVP': 1,
'All-Star': 3,
'Starter': 9,
'Reserve': 7,
'Replacement': 5
}
if this_event['id'] in [1, 2]:
max_counts['MVP'] = 2
elif this_event['id'] == 5:
g_query = await db_get(
'games',
params=[('season', draft_team['season']), ('team1_id', draft_team['id']), ('gauntlet_id', 5)]
)
if g_query['count'] > 4:
game_count = g_query['count']
if game_count <= 14:
max_counts = {
'Hall of Fame': 1,
'MVP': 1,
'All-Star': 3,
'Starter': 10,
'Reserve': 7,
'Replacement': 4
}
elif game_count <= 24:
max_counts = {
'Hall of Fame': 1,
'MVP': 1,
'All-Star': 4,
'Starter': 10,
'Reserve': 7,
'Replacement': 3
}
elif game_count <= 34:
max_counts = {
'Hall of Fame': 1,
'MVP': 2,
'All-Star': 4,
'Starter': 10,
'Reserve': 7,
'Replacement': 2
}
elif game_count <= 49:
max_counts = {
'Hall of Fame': 2,
'MVP': 2,
'All-Star': 4,
'Starter': 10,
'Reserve': 7,
'Replacement': 1
}
elif game_count <= 64:
max_counts = {
'Hall of Fame': 2,
'MVP': 2,
'All-Star': 4,
'Starter': 11,
'Reserve': 7,
'Replacement': 0
}
elif game_count <= 79:
max_counts = {
'Hall of Fame': 2,
'MVP': 2,
'All-Star': 5,
'Starter': 11,
'Reserve': 6,
'Replacement': 0
}
elif game_count <= 99:
max_counts = {
'Hall of Fame': 2,
'MVP': 3,
'All-Star': 5,
'Starter': 11,
'Reserve': 5,
'Replacement': 0
}
elif game_count <= 119:
max_counts = {
'Hall of Fame': 2,
'MVP': 3,
'All-Star': 5,
'Starter': 12,
'Reserve': 4,
'Replacement': 0
}
elif game_count <= 139:
max_counts = {
'Hall of Fame': 2,
'MVP': 3,
'All-Star': 6,
'Starter': 12,
'Reserve': 3,
'Replacement': 0
}
elif game_count <= 164:
max_counts = {
'Hall of Fame': 2,
'MVP': 4,
'All-Star': 6,
'Starter': 12,
'Reserve': 2,
'Replacement': 0
}
elif game_count <= 189:
max_counts = {
'Hall of Fame': 3,
'MVP': 4,
'All-Star': 6,
'Starter': 12,
'Reserve': 1,
'Replacement': 0
}
elif game_count <= 219:
max_counts = {
'Hall of Fame': 3,
'MVP': 4,
'All-Star': 6,
'Starter': 13,
'Reserve': 0,
'Replacement': 0
}
elif game_count <= 249:
max_counts = {
'Hall of Fame': 3,
'MVP': 4,
'All-Star': 7,
'Starter': 12,
'Reserve': 0,
'Replacement': 0
}
else:
max_counts = {
'Hall of Fame': 3,
'MVP': 5,
'All-Star': 7,
'Starter': 11,
'Reserve': 0,
'Replacement': 0
}
logging.info(f'gauntlets.py - run_draft / max_counts: {max_counts}')
round_num = 1
counter = 0
view = helpers.Confirm([interaction.user])
if this_event['id'] == 1:
view.confirm.label = 'Let\'s a-Go!'
else:
view.confirm.label = 'Let\'s Go!'
intro_embed = await get_embed(this_event=this_event)
intro_embed.title += ' - Are you ready?'
await interaction.edit_original_response(
content=None,
embed=intro_embed,
view=view
)
await view.wait()
if not view.value:
await interaction.edit_original_response(content=None, embed=intro_embed, view=None)
await interaction.channel.send('You\'ll be back')
raise ZeroDivisionError()
else:
await interaction.edit_original_response(
content=None,
embed=intro_embed,
view=None
)
def get_embeds(include_links=True):
top_embed = helpers.get_team_embed(f'{embed_title} - Round {round_num}')
top_embed.description = f'Rarity Counts'
bot_embed = helpers.get_team_embed(f'{embed_title} - Round {round_num}')
bot_embed.description = f'Current Roster'
all_str = {
'Hall of Fame': '',
'MVP': '',
'All-Star': '',
'Starter': '',
'Reserve': '',
'Replacement': '',
'C': '',
'1B': '',
'2B': '',
'3B': '',
'SS': '',
'LF': '',
'CF': '',
'RF': '',
'DH': '',
'SP': '',
'RP': '',
'CP': ''
}
for y in all_players:
if include_links:
name_string = f'[{helpers.player_desc(y)}]({y["image"]})'
else:
name_string = f'{helpers.player_desc(y)}'
all_str[y['rarity']['name']] += f'{name_string}\n'
for z in helpers.get_all_pos(y):
all_str[z] += f'{name_string}\n'
top_embed.add_field(name=f'HoFs ({counts["Hall of Fame"]}/{max_counts["Hall of Fame"]})', value=all_str['Hall of Fame'], inline=False)
top_embed.add_field(name=f'MVPs ({counts["MVP"]}/{max_counts["MVP"]})', value=all_str['MVP'], inline=False)
top_embed.add_field(
name=f'All-Stars ({counts["All-Star"]}/{max_counts["All-Star"]})', value=all_str['All-Star'], inline=False)
top_embed.add_field(
name=f'Starters ({counts["Starter"]}/{max_counts["Starter"]})', value=all_str['Starter'], inline=False)
top_embed.add_field(
name=f'Reserves ({counts["Reserve"]}/{max_counts["Reserve"]})', value=all_str['Reserve'], inline=False)
top_embed.add_field(
name=f'Replacements ({counts["Replacement"]}/{max_counts["Replacement"]})',
value=all_str['Replacement'],
inline=False
)
bot_embed.add_field(name=f'Catcher', value=all_str['C'], inline=False)
bot_embed.add_field(name=f'First Base', value=all_str['1B'], inline=False)
bot_embed.add_field(name=f'Second Base', value=all_str['2B'], inline=False)
bot_embed.add_field(name=f'Third Base', value=all_str['3B'], inline=False)
bot_embed.add_field(name=f'Shortstop', value=all_str['SS'], inline=False)
bot_embed.add_field(name=f'Left Field', value=all_str['LF'], inline=False)
bot_embed.add_field(name=f'Center Field', value=all_str['CF'], inline=False)
bot_embed.add_field(name=f'Right Field', value=all_str['RF'], inline=False)
bot_embed.add_field(name=f'Designated Hitter', value=all_str['DH'], inline=False)
bot_embed.add_field(name=f'Starting Pitcher', value=all_str['SP'], inline=False)
bot_embed.add_field(name=f'Relief Pitcher', value=all_str['RP'], inline=False)
bot_embed.add_field(name=f'Closing Pitcher', value=all_str['CP'], inline=False)
return [top_embed, bot_embed]
logging.info(f'getting last message')
last_message = await interaction.channel.send(content=None, embeds=get_embeds(include_links=False))
logging.info(f'going into draft')
backyard_round = None
custom_player_round = None
if this_event['id'] == 1:
mario_round = None
while round_num <= 26 and counter < 50:
counter += 1
params = copy.deepcopy(base_params)
# Set rarity param based on round number
if round_num == 1:
params.extend([
('min_rarity', RARITY['MVP']), ('max_rarity', RARITY['MVP'])
])
elif round_num == 2:
params.extend([
('min_rarity', RARITY['All-Star']), ('max_rarity', RARITY['All-Star'])
])
elif round_num <= 5:
params.extend([
('min_rarity', RARITY['Starter']), ('max_rarity', RARITY['Starter'])
])
elif round_num == 6:
if random.randint(1, 2) == 1:
params = [
('min_rarity', RARITY['MVP']), ('max_rarity', RARITY['MVP']), ('cardset_id', 8)
]
mario_round = 6
else:
params.extend([
('min_rarity', RARITY['MVP']), ('max_rarity', RARITY['MVP']), ('pos_exc', 'RP')
])
elif round_num == 7:
if random.randint(1, 2) == 1 and mario_round is None:
params = [
('min_rarity', RARITY['All-Star']), ('max_rarity', RARITY['All-Star']), ('cardset_id', 8)
]
mario_round = 7
else:
params.extend([
('min_rarity', RARITY['All-Star']), ('max_rarity', RARITY['All-Star'])
])
elif round_num == 8:
if mario_round is None:
params = [
('min_rarity', RARITY['Starter']), ('max_rarity', RARITY['Starter']), ('cardset_id', 8)
]
mario_round = 12
else:
params.extend([
('min_rarity', RARITY['Starter']), ('max_rarity', RARITY['Starter'])
])
elif round_num <= 11:
params.extend([
('min_rarity', RARITY['Starter']), ('max_rarity', RARITY['Starter'])
])
elif round_num <= 15:
params.extend([
('min_rarity', RARITY['Reserve']), ('max_rarity', RARITY['Reserve'])
])
elif round_num <= 18:
params.extend([
('min_rarity', RARITY['Replacement']), ('max_rarity', RARITY['Replacement'])
])
elif round_num == 19:
params.extend([
('min_rarity', RARITY['All-Star']), ('max_rarity', RARITY['All-Star'])
])
elif round_num <= 21:
params.extend([
('min_rarity', RARITY['Starter']), ('max_rarity', RARITY['Starter'])
])
elif round_num <= 24:
params.extend([
('min_rarity', RARITY['Reserve']), ('max_rarity', RARITY['Reserve'])
])
elif round_num <= 26:
params.extend([
('min_rarity', RARITY['Replacement']), ('max_rarity', RARITY['Replacement'])
])
this_batch = []
for x in ['SP', 'RP', 'IF', 'OF']:
# Slot 1 - SP
if x == 'SP':
if counts['SP'] < 6:
slot_params = [('pos_inc', 'SP')]
elif counts['RP'] < 6:
slot_params = [('pos_inc', 'RP')]
else:
slot_params = [('pos_exc', 'SP'), ('pos_exc', 'RP')]
# Slot 2 - RP
elif x == 'RP':
logging.info(f'counts[RP]: {counts["RP"]}')
if counts['RP'] < 8:
slot_params = [('pos_inc', 'RP')]
elif counts['SP'] < 4:
slot_params = [('pos_inc', 'SP')]
else:
slot_params = [('pos_exc', 'SP'), ('pos_exc', 'RP')]
# Slot 3 - IF
elif x == 'IF':
slot_params = []
for y in ['1B', '2B', '3B', 'SS']:
if (counts[y] == 2 or counts[y] == 3) and 0 not in [
counts['C'], counts['1B'], counts['2B'], counts['3B'], counts['SS'], counts['LF'],
counts['CF'], counts['RF']]:
slot_params.append(('pos_inc', y))
elif counts[y] < 4:
slot_params.append(('pos_inc', y))
if counts['C'] < 2:
slot_params.append(('pos_inc', 'C'))
if len(slot_params) == 0:
slot_params = [('pos_exc', 'C'), ('pos_exc', '1B'), ('pos_exc', '2B'), ('pos_exc', '3B'),
('pos_exc', 'SS')]
# Slot 4 - OF
else:
slot_params = []
for y in ['LF', 'CF', 'RF']:
if counts[y] > 4:
pass
elif counts[y] > 2 and 0 not in [counts['LF'], counts['CF'], counts['RF']]:
slot_params.append(('pos_inc', y))
elif counts[y] < 3:
slot_params.append(('pos_inc', y))
if len(slot_params) == 0:
slot_params = [('pos_exc', 'LF'), ('pos_exc', 'CF'), ('pos_exc', 'RF')]
logging.info(f'this_batch: {this_batch}')
logging.info(f'slot_params: {slot_params}')
logging.info(f'params: {params}')
slot_params.extend(params)
p_query = await db_get('players/random', params=slot_params)
if p_query['count'] > 0:
# test_player_list = ''
# for z in p_query['players']:
# test_player_list += f'{z["rarity"]["name"]} - {z["description"]} - {helpers.get_all_pos(x)}\n'
# Collect 1 cards with no repeat player names
for i in p_query['players']:
if i['p_name'] not in p_names and i not in this_batch:
this_batch.append(i)
break
if len(this_batch) < 4:
logging.error(f'Pulled less than 4 players in gauntlet draft')
p_query = await db_get('players/random', params=params)
for i in p_query['players']:
if i['p_name'] not in p_names and i not in this_batch:
this_batch.append(i)
if len(this_batch) >= 4:
break
if len(this_batch) < 4:
raise KeyError(f'This is embarassing, but I couldn\'t find enough players for you to draft from.')
# Present choices and capture selection
p_choice = await helpers.get_choice_from_cards(interaction, this_batch, delete_message=True)
# Add player to list and update counts
p_names.append(p_choice['p_name'])
counts[p_choice['rarity']['name']] += 1
all_players.append(p_choice)
if p_choice['pos_1'] in ['SP', 'RP']:
counts[p_choice['pos_1']] += 1
else:
for x in helpers.get_all_pos(p_choice):
if x in counts:
counts[x] += 1
# Update roster embed
round_num += 1
await last_message.edit(content=None, embeds=get_embeds(include_links=False))
elif this_event['id'] == 2:
while round_num <= 26 and counter < 50:
counter += 1
params = copy.deepcopy(base_params)
# Set rarity param based on round number
if round_num == 1:
params.extend([
('min_rarity', RARITY['MVP']), ('max_rarity', RARITY['MVP'])
])
elif round_num == 2:
params.extend([
('min_rarity', RARITY['All-Star']), ('max_rarity', RARITY['All-Star'])
])
elif round_num <= 5:
params.extend([
('min_rarity', RARITY['Starter']), ('max_rarity', RARITY['Starter'])
])
elif round_num == 6:
params.extend([
('min_rarity', RARITY['MVP']), ('max_rarity', RARITY['MVP']), ('pos_exc', 'RP')
])
elif round_num == 7:
params.extend([
('min_rarity', RARITY['All-Star']), ('max_rarity', RARITY['All-Star'])
])
elif round_num <= 11:
params.extend([
('min_rarity', RARITY['Starter']), ('max_rarity', RARITY['Starter'])
])
elif round_num <= 15:
params.extend([
('min_rarity', RARITY['Reserve']), ('max_rarity', RARITY['Reserve'])
])
elif round_num <= 18:
params.extend([
('min_rarity', RARITY['Replacement']), ('max_rarity', RARITY['Replacement'])
])
elif round_num == 19:
params.extend([
('min_rarity', RARITY['All-Star']), ('max_rarity', RARITY['All-Star'])
])
elif round_num <= 21:
params.extend([
('min_rarity', RARITY['Starter']), ('max_rarity', RARITY['Starter'])
])
elif round_num <= 24:
params.extend([
('min_rarity', RARITY['Reserve']), ('max_rarity', RARITY['Reserve'])
])
elif round_num <= 26:
params.extend([
('min_rarity', RARITY['Replacement']), ('max_rarity', RARITY['Replacement'])
])
this_batch = []
for x in ['SP', 'RP', 'IF', 'OF']:
# Slot 1 - SP
if x == 'SP':
if counts['SP'] > 5:
slot_params = [('pos_exc', 'RP')]
if counts['RP'] > 7:
slot_params = [('pos_exc', 'SP')]
else:
slot_params = [('pos_inc', 'SP')]
# if counts['SP'] > 5:
# slot_params = [('pos_exc', 'SP')]
# elif counts['RP'] < 6:
# slot_params = [('pos_inc', 'RP')]
# else:
# slot_params = [('pos_exc', 'SP'), ('pos_exc', 'RP')]
# Slot 2 - RP
elif x == 'RP':
logging.info(f'counts[RP]: {counts["RP"]}')
if counts['RP'] > 7:
slot_params = [('pos_exc', 'RP')]
if counts['SP'] > 5:
slot_params = [('pos_exc', 'SP')]
else:
slot_params = [('pos_inc', 'RP')]
# Slot 3 - IF
elif x == 'IF':
slot_params = []
for y in ['1B', '2B', '3B', 'SS', 'C']:
if (counts[y] > 1) and 0 in [
counts['C'], counts['1B'], counts['2B'], counts['3B'], counts['SS']
]:
slot_params.append(('pos_exc', y))
elif (y == 'C' and counts['C'] < 3) or (y != 'C' and counts[y] < 4):
slot_params.append(('pos_inc', y))
# if counts['C'] < 2:
# slot_params.append(('pos_inc', 'C'))
# if len(slot_params) == 0:
# slot_params = [('pos_exc', 'C'), ('pos_exc', '1B'), ('pos_exc', '2B'), ('pos_exc', '3B'),
# ('pos_exc', 'SS')]
# Slot 4 - OF
else:
slot_params = []
for y in ['LF', 'CF', 'RF']:
if counts[y] > 4:
slot_params.append(('pos_exc', y))
elif counts[y] > 1 and 0 in [counts['LF'], counts['CF'], counts['RF']]:
slot_params.append(('pos_exc', y))
elif counts[y] < 5:
slot_params.append(('pos_inc', y))
# if len(slot_params) == 0:
# slot_params = [('pos_exc', 'LF'), ('pos_exc', 'CF'), ('pos_exc', 'RF')]
logging.info(f'this_batch: {this_batch}')
logging.info(f'slot_params: {slot_params}')
logging.info(f'params: {params}')
# No position explicitly requested or denied
if len(slot_params) == 0:
if (counts['SP'] + counts['RP']) > (
counts['C'] + counts['1B'] + counts['2B'] + counts['SS'] + counts['LF'] + counts['CF'] +
counts['RF']):
pos_counts = [
('C', counts['C']), ('1B', counts['1B']), ('2B', counts['2B']), ('3B', counts['3B']),
('SS', counts['SS']), ('LF', counts['LF']), ('CF', counts['CF']), ('RF', counts['RF'])
]
pos_counts.sort(key=lambda z: z[1])
slot_params = [('pos_inc', pos_counts[0][0])]
else:
if counts['SP'] >= counts['RP']:
slot_params = [('pos_inc', 'RP')]
else:
slot_params = [('pos_inc', 'SP')]
slot_params.extend(params)
p_query = await db_get('players/random', params=slot_params)
if p_query['count'] > 0:
# test_player_list = ''
# for z in p_query['players']:
# test_player_list += f'{z["rarity"]["name"]} - {z["description"]} - {helpers.get_all_pos(x)}\n'
# Collect 1 cards with no repeat player names
for i in p_query['players']:
if i['p_name'] not in p_names and i not in this_batch:
this_batch.append(i)
break
if len(this_batch) < 4:
logging.error(f'Pulled less than 4 players in gauntlet draft')
p_query = await db_get('players/random', params=params)
for i in p_query['players']:
if i['p_name'] not in p_names and i not in this_batch:
this_batch.append(i)
if len(this_batch) >= 4:
break
if len(this_batch) < 4:
raise KeyError(f'This is embarassing, but I couldn\'t find enough players for you to draft from.')
# Present choices and capture selection
p_choice = await helpers.get_choice_from_cards(interaction, this_batch, delete_message=True)
# Add player to list and update counts
p_names.append(p_choice['p_name'])
counts[p_choice['rarity']['name']] += 1
all_players.append(p_choice)
if p_choice['pos_1'] in ['SP', 'RP']:
counts[p_choice['pos_1']] += 1
else:
for x in helpers.get_all_pos(p_choice):
if x in counts:
counts[x] += 1
# Update roster embed
round_num += 1
await last_message.edit(content=None, embeds=get_embeds(include_links=False))
elif this_event['id'] == 3:
while round_num <= 26 and counter < 50:
logging.info(f'round {round_num}')
counter += 1
params = copy.deepcopy(base_params)
# Set rarity param based on round number
if round_num == 1:
params.extend([
('min_rarity', RARITY['HoF']), ('max_rarity', RARITY['HoF'])
])
elif round_num == 2:
params.extend([
('min_rarity', RARITY['All-Star']), ('max_rarity', RARITY['All-Star'])
])
elif round_num <= 5:
params.extend([
('min_rarity', RARITY['Starter']), ('max_rarity', RARITY['Starter'])
])
elif round_num == 6:
params.extend([
('min_rarity', RARITY['MVP']), ('max_rarity', RARITY['MVP']), ('pos_exc', 'RP')
])
elif round_num == 7:
params.extend([
('min_rarity', RARITY['All-Star']), ('max_rarity', RARITY['All-Star'])
])
elif round_num <= 11:
params.extend([
('min_rarity', RARITY['Starter']), ('max_rarity', RARITY['Starter'])
])
elif round_num <= 15:
params.extend([
('min_rarity', RARITY['Reserve']), ('max_rarity', RARITY['Reserve'])
])
elif round_num <= 18:
params.extend([
('min_rarity', RARITY['Replacement']), ('max_rarity', RARITY['Replacement'])
])
elif round_num == 19:
params.extend([
('min_rarity', RARITY['All-Star']), ('max_rarity', RARITY['All-Star'])
])
elif round_num <= 21:
params.extend([
('min_rarity', RARITY['Starter']), ('max_rarity', RARITY['Starter'])
])
elif round_num <= 24:
params.extend([
('min_rarity', RARITY['Reserve']), ('max_rarity', RARITY['Reserve'])
])
elif round_num <= 26:
params.extend([
('min_rarity', RARITY['Replacement']), ('max_rarity', RARITY['Replacement'])
])
logging.info(f'starting position loop')
this_batch = []
for x in ['SP', 'RP', 'IF', 'OF']:
# Slot 1 - SP
if x == 'SP':
if counts['SP'] > 5:
slot_params = [('pos_exc', 'RP')]
if counts['RP'] > 7:
slot_params = [('pos_exc', 'SP')]
else:
slot_params = [('pos_inc', 'SP')]
# if counts['SP'] > 5:
# slot_params = [('pos_exc', 'SP')]
# elif counts['RP'] < 6:
# slot_params = [('pos_inc', 'RP')]
# else:
# slot_params = [('pos_exc', 'SP'), ('pos_exc', 'RP')]
# Slot 2 - RP
elif x == 'RP':
logging.info(f'counts[RP]: {counts["RP"]}')
if counts['RP'] > 7:
slot_params = [('pos_exc', 'RP')]
if counts['SP'] > 5:
slot_params = [('pos_exc', 'SP')]
else:
slot_params = [('pos_inc', 'RP')]
# Slot 3 - IF
elif x == 'IF':
slot_params = []
for y in ['1B', '2B', '3B', 'SS', 'C']:
if (counts[y] > 1) and 0 in [
counts['C'], counts['1B'], counts['2B'], counts['3B'], counts['SS']
]:
slot_params.append(('pos_exc', y))
elif (y == 'C' and counts['C'] < 3) or (y != 'C' and counts[y] < 4):
slot_params.append(('pos_inc', y))
# if counts['C'] < 2:
# slot_params.append(('pos_inc', 'C'))
# if len(slot_params) == 0:
# slot_params = [('pos_exc', 'C'), ('pos_exc', '1B'), ('pos_exc', '2B'), ('pos_exc', '3B'),
# ('pos_exc', 'SS')]
# Slot 4 - OF
else:
slot_params = []
for y in ['LF', 'CF', 'RF']:
if counts[y] > 4:
slot_params.append(('pos_exc', y))
elif counts[y] > 1 and 0 in [counts['LF'], counts['CF'], counts['RF']]:
slot_params.append(('pos_exc', y))
elif counts[y] < 5:
slot_params.append(('pos_inc', y))
# if len(slot_params) == 0:
# slot_params = [('pos_exc', 'LF'), ('pos_exc', 'CF'), ('pos_exc', 'RF')]
logging.info(f'this_batch: {this_batch}')
logging.info(f'slot_params: {slot_params}')
logging.info(f'params: {params}')
# No position explicitly requested or denied
if len(slot_params) == 0:
if (counts['SP'] + counts['RP']) > (
counts['C'] + counts['1B'] + counts['2B'] + counts['SS'] + counts['LF'] + counts['CF'] +
counts['RF']):
pos_counts = [
('C', counts['C']), ('1B', counts['1B']), ('2B', counts['2B']), ('3B', counts['3B']),
('SS', counts['SS']), ('LF', counts['LF']), ('CF', counts['CF']), ('RF', counts['RF'])
]
pos_counts.sort(key=lambda z: z[1])
slot_params = [('pos_inc', pos_counts[0][0])]
else:
if counts['SP'] >= counts['RP']:
slot_params = [('pos_inc', 'RP')]
else:
slot_params = [('pos_inc', 'SP')]
slot_params.extend(params)
p_query = await db_get('players/random', params=slot_params)
if p_query['count'] > 0:
# test_player_list = ''
# for z in p_query['players']:
# test_player_list += f'{z["rarity"]["name"]} - {z["description"]} - {helpers.get_all_pos(x)}\n'
# Collect 1 cards with no repeat player names
for i in p_query['players']:
if i['p_name'] not in p_names and i not in this_batch:
this_batch.append(i)
break
if len(this_batch) < 4:
logging.error(f'Pulled less than 4 players in gauntlet draft')
p_query = await db_get('players/random', params=params)
for i in p_query['players']:
if i['p_name'] not in p_names and i not in this_batch:
this_batch.append(i)
if len(this_batch) >= 4:
break
if len(this_batch) < 4:
raise KeyError(f'This is embarassing, but I couldn\'t find enough players for you to draft from.')
# Present choices and capture selection
p_choice = await helpers.get_choice_from_cards(interaction, this_batch, delete_message=True)
# Add player to list and update counts
p_names.append(p_choice['p_name'])
counts[p_choice['rarity']['name']] += 1
all_players.append(p_choice)
if p_choice['pos_1'] in ['SP', 'RP']:
counts[p_choice['pos_1']] += 1
else:
for x in helpers.get_all_pos(p_choice):
if x in counts:
counts[x] += 1
# Update roster embed
round_num += 1
await last_message.edit(content=None, embeds=get_embeds(include_links=False))
elif this_event['id'] == 4:
while round_num <= 26 and counter < 50:
counter += 1
params = copy.deepcopy(base_params)
# Set rarity param based on round number
if round_num == 1:
params.extend([
('min_rarity', RARITY['HoF']), ('max_rarity', RARITY['HoF'])
])
elif round_num == 2:
params.extend([
('min_rarity', RARITY['All-Star']), ('max_rarity', RARITY['All-Star'])
])
elif round_num <= 5:
params.extend([
('min_rarity', RARITY['Starter']), ('max_rarity', RARITY['Starter'])
])
elif round_num == 6:
if random.randint(1, 2) == 1:
params = [
('min_rarity', RARITY['MVP']), ('max_rarity', RARITY['MVP']), ('cardset_id', 16)
]
backyard_round = 6
else:
params.extend([
('min_rarity', RARITY['MVP']), ('max_rarity', RARITY['MVP']), ('pos_exc', 'RP')
])
elif round_num == 7:
if random.randint(1, 2) == 1 and backyard_round is None:
params = [
('min_rarity', RARITY['All-Star']), ('max_rarity', RARITY['All-Star']), ('cardset_id', 16)
]
backyard_round = 7
else:
params.extend([
('min_rarity', RARITY['All-Star']), ('max_rarity', RARITY['All-Star'])
])
elif round_num == 8:
if backyard_round is None:
params = [
('min_rarity', RARITY['Starter']), ('max_rarity', RARITY['Starter']), ('cardset_id', 16)
]
backyard_round = 8
else:
params.extend([
('min_rarity', RARITY['Starter']), ('max_rarity', RARITY['Starter'])
])
elif round_num <= 11:
params.extend([
('min_rarity', RARITY['Starter']), ('max_rarity', RARITY['Starter'])
])
elif round_num <= 15:
params.extend([
('min_rarity', RARITY['Reserve']), ('max_rarity', RARITY['Reserve'])
])
elif round_num <= 18:
params.extend([
('min_rarity', RARITY['Replacement']), ('max_rarity', RARITY['Replacement'])
])
elif round_num == 19:
params.extend([
('min_rarity', RARITY['All-Star']), ('max_rarity', RARITY['All-Star'])
])
elif round_num <= 21:
params.extend([
('min_rarity', RARITY['Starter']), ('max_rarity', RARITY['Starter'])
])
elif round_num <= 24:
params.extend([
('min_rarity', RARITY['Reserve']), ('max_rarity', RARITY['Reserve'])
])
elif round_num <= 26:
params.extend([
('min_rarity', RARITY['Replacement']), ('max_rarity', RARITY['Replacement'])
])
this_batch = []
for x in ['SP', 'RP', 'IF', 'OF']:
# Slot 1 - SP
if x == 'SP':
if counts['SP'] > 5:
slot_params = [('pos_exc', 'SP')]
if counts['RP'] > 7:
slot_params = [('pos_exc', 'RP')]
else:
slot_params = [('pos_inc', 'SP')]
# if counts['SP'] > 5:
# slot_params = [('pos_exc', 'SP')]
# elif counts['RP'] < 6:
# slot_params = [('pos_inc', 'RP')]
# else:
# slot_params = [('pos_exc', 'SP'), ('pos_exc', 'RP')]
# Slot 2 - RP
elif x == 'RP':
logging.info(f'counts[RP]: {counts["RP"]}')
if counts['RP'] > 7:
slot_params = [('pos_exc', 'RP')]
if counts['SP'] > 5:
slot_params = [('pos_exc', 'SP')]
else:
slot_params = [('pos_inc', 'RP')]
# Slot 3 - IF
elif x == 'IF':
slot_params = []
for y in ['1B', '2B', '3B', 'SS', 'C']:
if (counts[y] > 1) and 0 in [
counts['C'], counts['1B'], counts['2B'], counts['3B'], counts['SS']
]:
slot_params.append(('pos_exc', y))
elif (y == 'C' and counts['C'] < 3) or (y != 'C' and counts[y] < 4):
slot_params.append(('pos_inc', y))
# if counts['C'] < 2:
# slot_params.append(('pos_inc', 'C'))
# if len(slot_params) == 0:
# slot_params = [('pos_exc', 'C'), ('pos_exc', '1B'), ('pos_exc', '2B'), ('pos_exc', '3B'),
# ('pos_exc', 'SS')]
# Slot 4 - OF
else:
slot_params = []
for y in ['LF', 'CF', 'RF']:
if counts[y] > 4:
slot_params.append(('pos_exc', y))
elif counts[y] > 1 and 0 in [counts['LF'], counts['CF'], counts['RF']]:
slot_params.append(('pos_exc', y))
elif counts[y] < 5:
slot_params.append(('pos_inc', y))
# if len(slot_params) == 0:
# slot_params = [('pos_exc', 'LF'), ('pos_exc', 'CF'), ('pos_exc', 'RF')]
logging.info(f'this_batch: {this_batch}')
logging.info(f'slot_params: {slot_params}')
logging.info(f'params: {params}')
# No position explicitly requested or denied
if len(slot_params) == 0:
if (counts['SP'] + counts['RP']) > (
counts['C'] + counts['1B'] + counts['2B'] + counts['SS'] + counts['LF'] + counts['CF'] +
counts['RF']):
pos_counts = [
('C', counts['C']), ('1B', counts['1B']), ('2B', counts['2B']), ('3B', counts['3B']),
('SS', counts['SS']), ('LF', counts['LF']), ('CF', counts['CF']), ('RF', counts['RF'])
]
pos_counts.sort(key=lambda z: z[1])
slot_params = [('pos_inc', pos_counts[0][0])]
else:
if counts['SP'] >= counts['RP']:
slot_params = [('pos_inc', 'RP')]
else:
slot_params = [('pos_inc', 'SP')]
slot_params.extend(params)
p_query = await db_get('players/random', params=slot_params)
if p_query['count'] > 0:
# test_player_list = ''
# for z in p_query['players']:
# test_player_list += f'{z["rarity"]["name"]} - {z["description"]} - {helpers.get_all_pos(x)}\n'
# Collect 1 cards with no repeat player names
for i in p_query['players']:
if i['p_name'] not in p_names and i not in this_batch:
this_batch.append(i)
break
if len(this_batch) < 4:
logging.error(f'Pulled less than 4 players in gauntlet draft')
p_query = await db_get('players/random', params=params)
for i in p_query['players']:
if i['p_name'] not in p_names and i not in this_batch:
this_batch.append(i)
if len(this_batch) >= 4:
break
if len(this_batch) < 4:
raise KeyError(f'This is embarassing, but I couldn\'t find enough players for you to draft from.')
# Present choices and capture selection
p_choice = await helpers.get_choice_from_cards(interaction, this_batch, delete_message=True)
# Add player to list and update counts
p_names.append(p_choice['p_name'])
counts[p_choice['rarity']['name']] += 1
all_players.append(p_choice)
if p_choice['pos_1'] in ['SP', 'RP']:
counts[p_choice['pos_1']] += 1
else:
for x in helpers.get_all_pos(p_choice):
if x in counts:
counts[x] += 1
# Update roster embed
round_num += 1
await last_message.edit(content=None, embeds=get_embeds(include_links=False))
elif this_event['id'] == 5:
while round_num <= 26 and counter < 50:
counter += 1
params = copy.deepcopy(base_params)
logging.info(f'gauntlets.py - run_draft - event_id 5 / round_num: {round_num} / counter: {counter} '
f'/ counts: {counts} / max_counts: {max_counts}')
# Set rarity based on remaining counts
if counts['Hall of Fame'] < max_counts['Hall of Fame']:
params.extend([
('min_rarity', RARITY['HoF']), ('max_rarity', RARITY['HoF'])
])
elif counts['MVP'] < max_counts['MVP']:
params.extend([
('min_rarity', RARITY['MVP']), ('max_rarity', RARITY['MVP'])
])
elif counts['All-Star'] < max_counts['All-Star']:
params.extend([
('min_rarity', RARITY['All-Star']), ('max_rarity', RARITY['All-Star'])
])
elif counts['Starter'] < max_counts['Starter']:
params.extend([
('min_rarity', RARITY['Starter']), ('max_rarity', RARITY['Starter'])
])
elif counts['Reserve'] < max_counts['Reserve']:
params.extend([
('min_rarity', RARITY['Reserve']), ('max_rarity', RARITY['Reserve'])
])
else:
params.extend([
('min_rarity', RARITY['Replacement']), ('max_rarity', RARITY['Replacement'])
])
this_batch = []
for x in ['SP', 'RP', 'IF', 'OF']:
# Slot 1 - SP
if x == 'SP':
if counts['SP'] > 5:
slot_params = [('pos_exc', 'SP')]
if counts['RP'] > 7:
slot_params = [('pos_exc', 'RP')]
else:
slot_params = [('pos_inc', 'SP')]
# if counts['SP'] > 5:
# slot_params = [('pos_exc', 'SP')]
# elif counts['RP'] < 6:
# slot_params = [('pos_inc', 'RP')]
# else:
# slot_params = [('pos_exc', 'SP'), ('pos_exc', 'RP')]
# Slot 2 - RP
elif x == 'RP':
logging.info(f'counts[RP]: {counts["RP"]}')
if counts['RP'] > 7:
slot_params = [('pos_exc', 'RP')]
if counts['SP'] > 5:
slot_params = [('pos_exc', 'SP')]
else:
slot_params = [('pos_inc', 'RP')]
# Slot 3 - IF
elif x == 'IF':
slot_params = []
for y in ['1B', '2B', '3B', 'SS', 'C']:
if (counts[y] > 1) and 0 in [
counts['C'], counts['1B'], counts['2B'], counts['3B'], counts['SS']
]:
slot_params.append(('pos_exc', y))
elif (y == 'C' and counts['C'] < 3) or (y != 'C' and counts[y] < 4):
slot_params.append(('pos_inc', y))
# if counts['C'] < 2:
# slot_params.append(('pos_inc', 'C'))
# if len(slot_params) == 0:
# slot_params = [('pos_exc', 'C'), ('pos_exc', '1B'), ('pos_exc', '2B'), ('pos_exc', '3B'),
# ('pos_exc', 'SS')]
# Slot 4 - OF
else:
slot_params = []
for y in ['LF', 'CF', 'RF']:
if counts[y] > 4:
slot_params.append(('pos_exc', y))
elif counts[y] > 1 and 0 in [counts['LF'], counts['CF'], counts['RF']]:
slot_params.append(('pos_exc', y))
elif counts[y] < 5:
slot_params.append(('pos_inc', y))
# if len(slot_params) == 0:
# slot_params = [('pos_exc', 'LF'), ('pos_exc', 'CF'), ('pos_exc', 'RF')]
logging.info(f'this_batch: {this_batch}')
logging.info(f'slot_params: {slot_params}')
logging.info(f'params: {params}')
# No position explicitly requested or denied
if len(slot_params) == 0:
if (counts['SP'] + counts['RP']) > (
counts['C'] + counts['1B'] + counts['2B'] + counts['SS'] + counts['LF'] + counts['CF'] +
counts['RF']):
pos_counts = [
('C', counts['C']), ('1B', counts['1B']), ('2B', counts['2B']), ('3B', counts['3B']),
('SS', counts['SS']), ('LF', counts['LF']), ('CF', counts['CF']), ('RF', counts['RF'])
]
pos_counts.sort(key=lambda z: z[1])
slot_params = [('pos_inc', pos_counts[0][0])]
else:
if counts['SP'] >= counts['RP']:
slot_params = [('pos_inc', 'RP')]
else:
slot_params = [('pos_inc', 'SP')]
slot_params.extend(params)
p_query = await db_get('players/random', params=slot_params)
if p_query['count'] > 0:
# test_player_list = ''
# for z in p_query['players']:
# test_player_list += f'{z["rarity"]["name"]} - {z["description"]} - {helpers.get_all_pos(x)}\n'
# Collect 1 cards with no repeat player names
for i in p_query['players']:
if i['p_name'] not in p_names and i not in this_batch:
this_batch.append(i)
break
if len(this_batch) < 4:
logging.error(f'Pulled less than 4 players in gauntlet draft')
p_query = await db_get('players/random', params=params)
for i in p_query['players']:
if i['p_name'] not in p_names and i not in this_batch:
this_batch.append(i)
if len(this_batch) >= 4:
break
if len(this_batch) < 4:
raise KeyError(f'This is embarassing, but I couldn\'t find enough players for you to draft from.')
# Present choices and capture selection
p_choice = await helpers.get_choice_from_cards(interaction, this_batch, delete_message=True)
# Add player to list and update counts
p_names.append(p_choice['p_name'])
counts[p_choice['rarity']['name']] += 1
all_players.append(p_choice)
if p_choice['pos_1'] in ['SP', 'RP']:
counts[p_choice['pos_1']] += 1
else:
for x in helpers.get_all_pos(p_choice):
if x in counts:
counts[x] += 1
# Update roster embed
round_num += 1
await last_message.edit(content=None, embeds=get_embeds(include_links=False))
else:
logging.error(f'run_draft - No draft logic for Event ID {this_event["id"]}')
raise KeyError(f'Draft data not found for Gauntlet {this_event["id"]}')
if len(all_players) < 26:
raise KeyError(f'I gotta be honest - I shit the bed here and wasn\'t able to get you enough players to fill '
f'a team. I have to wipe this team, but please draft again after you tell Cal his bot sucks.')
this_pack = await db_post(
'packs/one',
payload={
'team_id': draft_team['id'],
'pack_type_id': 2,
'open_time': datetime.datetime.timestamp(datetime.datetime.now()) * 1000
}
)
await db_post(
'cards',
payload={'cards': [
{'player_id': x['player_id'], 'team_id': draft_team['id'], 'pack_id': this_pack['id']} for x in all_players
]}
)
await db_post(
'gauntletruns',
payload={
'team_id': draft_team['id'],
'gauntlet_id': this_event['id']
}
)
final_embed = get_embeds(False)[0]
final_embed.title = f'{main_team["lname"]} - {this_event["name"]} Draft'
if main_team['logo']:
final_embed.set_thumbnail(url=main_team["logo"])
return final_embed
async def get_embed(this_run=None, this_event=None, this_team=None):
logging.info(f'get_embed - this_run:\n{this_run}\n\nthis_event:\n{this_event}')
if this_run is None and this_event is None:
raise KeyError('Must provide either a run or an event to get_embed')
if this_run is not None:
this_event = this_run['gauntlet']
embed = helpers.image_embed(
image_url=this_event['url'],
title=f'{this_event["name"]}',
)
if this_run is not None and this_run['team']['logo']:
embed.set_thumbnail(url=this_run['team']['logo'])
embed.description = this_run['team']['lname']
embed.add_field(name='Event Info', value=this_event['short_desc'], inline=False)
if this_run is not None:
embed.add_field(name='Current Record', value=f'{this_run["wins"]}-{this_run["losses"]}', inline=False)
r_query = await db_get('gauntletrewards', params=[('gauntlet_id', this_event['id'])])
reward_string = ''
for x in r_query['rewards']:
if this_run is not None:
if this_run['wins'] >= x['win_num'] and this_run['losses'] <= x['loss_max']:
reward_string += '✅️ '
elif this_run['losses'] > x['loss_max']:
reward_string += ''
else:
reward_string += ''
reward_string += f'{x["win_num"]}{"-0" if x["loss_max"] == 0 else " Wins"}: '
if x['reward']['money']:
reward_string += f' {x["reward"]["money"]}\n'
elif x['reward']['player']:
reward_string += f' {x["reward"]["player"]["description"]}\n'
elif x['reward']['pack_type']:
reward_string += f' {x["reward"]["pack_type"]["name"]} Pack\n'
if len(reward_string) > 0:
embed.add_field(name='Rewards', value=reward_string)
if this_team is not None:
run_query = await db_get('gauntletruns', params=[('team_id', this_team['id']), ('gauntlet_id', this_event['id'])])
record_name = f'{this_team["abbrev"].split("-")[1]} Record'
else:
run_query = await db_get('gauntletruns', params=[('gauntlet_id', this_event['id'])])
record_name = f'League Record'
record_value = ''
if run_query['count'] > 0:
max_wins, victories, perfects = 0, 0, 0
record_value += f'Attempts: {run_query["count"]}\n'
for x in run_query['runs']:
if x['wins'] > max_wins:
max_wins = x['wins']
if x['wins'] == 10:
victories += 1
if x['losses'] == 0:
perfects += 1
if victories > 0:
record_value += f'Victories: {victories}\n' \
f'10-0 Runs: {perfects}'
else:
record_value += f'Most Wins: {max_wins}'
embed.add_field(name=record_name, value=record_value)
if this_run is not None:
embed.add_field(name='Team Sheet', value=helpers.get_roster_sheet(this_run['team']), inline=False)
return embed
async def post_result(run_id: int, is_win: bool, this_team, bot, channel):
this_run = await db_get('gauntletruns', object_id=run_id)
this_event = await db_get('events', object_id=this_run['gauntlet']['id'])
t_query = await db_get('teams', params=[('abbrev', f'{this_team["abbrev"].replace("Gauntlet-","")}')])
main_team = t_query['teams'][0]
if is_win:
this_run = await db_patch(
'gauntletruns',
object_id=this_run['id'],
params=[('wins', this_run['wins'] + 1), ('ended', this_run['wins'] + 1 == 10)]
)
r_query = await db_get(
'gauntletrewards',
params=[('gauntlet_id', this_event['id']), ('win_num', this_run['wins']), ('loss_max', this_run['losses'])]
)
reward_string = ''
for x in r_query['rewards']:
if x['reward']['money']:
await db_post(f'teams/{main_team["id"]}/money/{x["reward"]["money"]}')
reward_string += f'- {x["reward"]["money"]}\n'
elif x['reward']['player']:
this_pack = await db_post(
'packs/one',
payload={
'team_id': main_team['id'],
'pack_type_id': 4,
'open_time': datetime.datetime.timestamp(datetime.datetime.now()) * 1000}
)
await helpers.give_cards_to_team(
main_team, player_ids=[x['reward']['player']['player_id']], pack_id=this_pack['id'])
reward_string += f'- {helpers.player_desc(x["reward"]["player"])}\n'
elif x['reward']['pack_type'] and this_event['id'] in [3, 4, 5]:
if this_event['id'] == 3:
cardset_id = 13
team_id = 58
elif this_event['id'] == 4:
cardset_id = 16
team_id = 79
else:
cardset_id = 17
team_id = None
if x['reward']['pack_type']['id'] == 9:
cardset_id = 18
await db_post(
'packs', payload={'packs': [{
'team_id': main_team['id'],
'pack_type_id': x['reward']['pack_type']['id'],
'pack_cardset_id': cardset_id,
'pack_team_id': team_id if x['reward']['pack_type']['id'] == 8 else None
}]}
)
reward_string += f'- 1x {x["reward"]["pack_type"]["name"]} Pack'
elif x['reward']['pack_type']:
await helpers.give_packs(main_team, 1, x['reward']['pack_type'])
reward_string += f'- 1x {x["reward"]["pack_type"]["name"]} Pack'
if this_run['wins'] == 10:
choas_role = await get_or_create_role(channel, "CHOAS ALERT", mentionable=True)
await send_to_channel(
bot,
'pd-network-news',
content=f'{choas_role.mention}\n\nThe **{this_team["lname"]}** have completed the '
f'**{this_event["name"]} Gauntlet** with a record of {this_run["wins"]}-'
f'{this_run["losses"]}!'
)
final_message = f'That\'s number 10! Way to go - you have completed the **{this_event["name"]} Gauntlet** ' \
f'with a record of {this_run["wins"]}-{this_run["losses"]}! '
c_query = await db_post(f'cards/wipe-team/{this_team["id"]}')
else:
final_message = f'Big win there! Your {this_event["name"]} record is now **{this_run["wins"]}-' \
f'{this_run["losses"]}**. '
if len(reward_string) > 0:
final_message += f"You earned the following rewards:\n{reward_string}"
final_message += f'\n\nGo share the highlights in {get_channel(channel, "pd-news-ticker").mention}!'
await channel.send(
content=final_message,
embed=await get_embed(this_run)
)
else:
this_run = await db_patch(
'gauntletruns',
object_id=this_run['id'],
params=[('losses', this_run['losses'] + 1), ('ended', this_run['losses'] + 1 == 2)]
)
l_message = f'Tough loss. That brings your {this_event["name"]} record to ' \
f'**{this_run["wins"]}-{this_run["losses"]}**. '
if this_run['losses'] == 2:
l_message += 'That\'s the end of this run - better luck next time!'
c_query = await db_post(f'cards/wipe-team/{this_team["id"]}')
await channel.send(
content=l_message,
embed=await get_embed(this_run)
)