1976 lines
81 KiB
Python
1976 lines
81 KiB
Python
import copy
|
|
import datetime
|
|
import logging
|
|
import random
|
|
from typing import Literal
|
|
|
|
import discord
|
|
from sqlmodel import Session
|
|
from discord import SelectOption
|
|
|
|
from exceptions import *
|
|
from in_game import ai_manager
|
|
import helpers
|
|
from helpers import RARITY, get_or_create_role, send_to_channel, get_channel
|
|
from api_calls import db_get, db_post, db_delete, db_patch
|
|
from in_game.gameplay_models import Lineup, Team
|
|
from in_game.gameplay_queries import get_player_or_none, get_team_or_none, get_or_create_ai_card, get_player_id_from_dict
|
|
from utilities.dropdown import DropdownView, SelectPokemonEvolution
|
|
|
|
|
|
logger = logging.getLogger('discord_app')
|
|
|
|
|
|
async def wipe_team(this_team: 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'])
|
|
c_query = await db_post(f'cards/wipe-team/{this_team.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(session: Session, this_team, this_event, this_run) -> Team:
|
|
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.')
|
|
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.')
|
|
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.')
|
|
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.')
|
|
elif this_event['id'] == 5:
|
|
if gp == 0:
|
|
t_id = 15
|
|
elif gp == 1:
|
|
t_id = 10
|
|
elif gp == 2:
|
|
t_id = 28
|
|
elif gp == 3:
|
|
t_id = 30
|
|
elif gp == 4:
|
|
t_id = 7
|
|
elif gp == 5:
|
|
t_id = 22
|
|
elif gp == 6:
|
|
t_id = 23
|
|
elif gp == 7:
|
|
t_id = 2
|
|
elif gp == 8:
|
|
t_id = 14
|
|
elif gp == 9:
|
|
t_id = 4
|
|
elif gp == 10:
|
|
t_id = 19
|
|
else:
|
|
raise KeyError(f'Hmm...I do not know who you should be playing right now.')
|
|
elif this_event['id'] == 6:
|
|
if gp == 0:
|
|
t_id = 18
|
|
elif gp == 1:
|
|
t_id = 6
|
|
elif gp == 2:
|
|
t_id = 17
|
|
elif gp == 3:
|
|
t_id = 21
|
|
elif gp == 4:
|
|
t_id = 4
|
|
elif gp == 5:
|
|
t_id = 23
|
|
elif gp == 6:
|
|
t_id = 5
|
|
elif gp == 7:
|
|
t_id = 3
|
|
elif gp == 8:
|
|
t_id = 19
|
|
elif gp == 9:
|
|
t_id = 27
|
|
elif gp == 10:
|
|
t_id = 25
|
|
else:
|
|
raise KeyError(f'Hmm...I do not know who you should be playing right now.')
|
|
elif this_event['id'] == 7:
|
|
if gp == 0:
|
|
t_id = 10
|
|
elif gp == 1:
|
|
t_id = 20
|
|
elif gp == 2:
|
|
t_id = 25
|
|
elif gp == 3:
|
|
t_id = 27
|
|
elif gp == 4:
|
|
t_id = 6
|
|
elif gp == 5:
|
|
t_id = 5
|
|
elif gp == 6:
|
|
t_id = 4
|
|
elif gp == 7:
|
|
t_id = 16
|
|
elif gp == 8:
|
|
t_id = 13
|
|
elif gp == 9:
|
|
t_id = 30
|
|
elif gp == 10:
|
|
t_id = 17
|
|
else:
|
|
raise KeyError(f'Hmm...I do not know who you should be playing right now.')
|
|
elif this_event['id'] == 8:
|
|
if gp == 0:
|
|
teams = [6, 13]
|
|
elif gp == 1:
|
|
teams = [11, 12, 22, 28]
|
|
elif gp == 2:
|
|
teams = [12, 27, 29]
|
|
elif gp == 3:
|
|
teams = [16, 18, 25]
|
|
elif gp == 4:
|
|
teams = [10, 18, 26]
|
|
elif gp == 5:
|
|
teams = [8, 24]
|
|
elif gp == 6:
|
|
teams = [1, 3, 8]
|
|
elif gp == 7:
|
|
teams = [4, 10, 21, 23, 30]
|
|
elif gp == 8:
|
|
teams = [4, 10, 21, 23, 30]
|
|
elif gp == 9:
|
|
teams = [2, 20]
|
|
elif gp == 10:
|
|
teams = [13, 14]
|
|
else:
|
|
teams = [19, 5]
|
|
t_id = teams[random.randint(0, len(teams)-1)]
|
|
else:
|
|
return None
|
|
|
|
this_team = await get_team_or_none(session, team_id=t_id)
|
|
logger.info(f'Gauntlet opponent: {this_team}')
|
|
return await get_team_or_none(session, t_id)
|
|
|
|
|
|
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(session, 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}')
|
|
logger.info(f'starter: {starter}')
|
|
this_player = await get_player_or_none(session, get_player_id_from_dict(starter))
|
|
if this_player is None:
|
|
log_exception(PlayerNotFoundException, 'Could not pull the AI\'s starting pitcher')
|
|
|
|
# get player card; create one if none found
|
|
logger.info(f'SP this_player: {this_player}')
|
|
this_card = await get_or_create_ai_card(
|
|
session,
|
|
this_player,
|
|
this_team
|
|
)
|
|
|
|
return Lineup(
|
|
team=this_team,
|
|
player=this_player,
|
|
card=this_card,
|
|
position='P',
|
|
batting_order=10,
|
|
is_fatigued=False,
|
|
game=this_game
|
|
)
|
|
|
|
|
|
async def run_draft(interaction: discord.Interaction, main_team: Team, this_event, draft_team: Team = None):
|
|
logger.info(f'Starting draft for {main_team.abbrev if draft_team is None else draft_team.abbrev}')
|
|
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.GAUNTLET1_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)]
|
|
elif this_event['id'] == 6:
|
|
embed_title = f'{main_team.lname} - {this_event['name']} Draft'
|
|
embed_description = f'{this_event["name"]}'
|
|
base_params = [('cardset_id', 20), ('cardset_id', 21), ('cardset_id', 22), ('cardset_id', 16),
|
|
('cardset_id', 8), ('limit', 8)]
|
|
elif this_event['id'] == 7:
|
|
embed_title = f'{main_team.lname} - {this_event['name']} Draft'
|
|
embed_description = f'{this_event["name"]}'
|
|
base_params = [('cardset_id', 5), ('cardset_id', 1), ('cardset_id', 3), ('cardset_id', 4), ('cardset_id', 23), ('cardset_id', 22), ('limit', 4)]
|
|
elif this_event['id'] == 8:
|
|
embed_title = f'{main_team.lname} - {this_event['name']} Draft'
|
|
embed_description = f'{this_event["name"]}'
|
|
base_params = [('cardset_id', 24), ('cardset_id', 25), ('cardset_id', 22), ('cardset_id', 23),
|
|
('limit', 8)]
|
|
else:
|
|
logger.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'] in [5, 6, 8]:
|
|
g_query = await db_get(
|
|
'games',
|
|
params=[('season', draft_team.season), ('team1_id', draft_team.id), ('gauntlet_id', this_event['id'])]
|
|
)
|
|
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
|
|
}
|
|
logger.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, round_num=1):
|
|
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'
|
|
|
|
if max_counts['Hall of Fame'] > 0:
|
|
top_embed.add_field(name=f'HoFs ({counts["Hall of Fame"]}/{max_counts["Hall of Fame"]})', value=all_str['Hall of Fame'], inline=False)
|
|
|
|
if max_counts['MVP'] > 0:
|
|
top_embed.add_field(name=f'MVPs ({counts["MVP"]}/{max_counts["MVP"]})', value=all_str['MVP'], inline=False)
|
|
|
|
if max_counts['All-Star'] > 0:
|
|
top_embed.add_field(
|
|
name=f'All-Stars ({counts["All-Star"]}/{max_counts["All-Star"]})', value=all_str['All-Star'], inline=False)
|
|
|
|
if max_counts['Starter'] > 0:
|
|
top_embed.add_field(
|
|
name=f'Starters ({counts["Starter"]}/{max_counts["Starter"]})', value=all_str['Starter'], inline=False)
|
|
|
|
if max_counts['Reserve'] > 0:
|
|
top_embed.add_field(
|
|
name=f'Reserves ({counts["Reserve"]}/{max_counts["Reserve"]})', value=all_str['Reserve'], inline=False)
|
|
|
|
if max_counts['Replacement'] > 0:
|
|
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]
|
|
|
|
logger.info(f'getting last message')
|
|
last_message = await interaction.channel.send(content=None, embeds=get_embeds(include_links=False))
|
|
|
|
async def draft_loop():
|
|
round_num = 1
|
|
counter = 0
|
|
while round_num <= 26 and counter < 50:
|
|
counter += 1
|
|
params = copy.deepcopy(base_params)
|
|
logger.info(f'gauntlets.py - run_draft - event_id {this_event["id"]} / round_num: {round_num} / counter: {counter} / 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':
|
|
logger.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')]
|
|
|
|
logger.info(f'this_batch: {this_batch}')
|
|
logger.info(f'slot_params: {slot_params}')
|
|
logger.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:
|
|
logger.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, round_num=round_num))
|
|
|
|
logger.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':
|
|
logger.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')]
|
|
|
|
logger.info(f'this_batch: {this_batch}')
|
|
logger.info(f'slot_params: {slot_params}')
|
|
logger.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:
|
|
logger.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':
|
|
logger.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')]
|
|
|
|
logger.info(f'this_batch: {this_batch}')
|
|
logger.info(f'slot_params: {slot_params}')
|
|
logger.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:
|
|
logger.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:
|
|
logger.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'])
|
|
])
|
|
|
|
logger.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':
|
|
logger.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')]
|
|
|
|
logger.info(f'this_batch: {this_batch}')
|
|
logger.info(f'slot_params: {slot_params}')
|
|
logger.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:
|
|
logger.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':
|
|
logger.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')]
|
|
|
|
logger.info(f'this_batch: {this_batch}')
|
|
logger.info(f'slot_params: {slot_params}')
|
|
logger.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:
|
|
logger.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'] in [5, 6, 8]:
|
|
await draft_loop()
|
|
elif this_event['id'] == 7:
|
|
round_num = 1
|
|
counter = 0
|
|
while round_num <= 26 and counter < 50:
|
|
counter += 1
|
|
params = copy.deepcopy(base_params)
|
|
logger.info(f'gauntlets.py - run_draft - event_id {this_event["id"]} / round_num: {round_num} / counter: {counter} / 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']:
|
|
if counts['Starter'] < 5:
|
|
params = [('cardset_id', 23), ('limit', 16)]
|
|
|
|
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':
|
|
logger.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')]
|
|
|
|
logger.info(f'this_batch: {this_batch}')
|
|
logger.info(f'slot_params: {slot_params}')
|
|
logger.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:
|
|
for i in p_query['players']:
|
|
if i['p_name'] not in p_names and i not in this_batch:
|
|
if i['cardset']['id'] == 23 and '420420' not in i['strat_code']:
|
|
pass
|
|
else:
|
|
this_batch.append(i)
|
|
break
|
|
|
|
if len(this_batch) < 4:
|
|
logger.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, round_num=round_num))
|
|
|
|
else:
|
|
logger.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):
|
|
logger.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 end_run(this_run, this_event, this_team: Team, force_end: bool = False):
|
|
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 or force_end:
|
|
l_message += 'That\'s the end of this run - better luck next time!'
|
|
this_run = await db_patch(
|
|
'gauntletruns',
|
|
object_id=this_run['id'],
|
|
params=[('ended', True)]
|
|
)
|
|
c_query = await db_post(f'cards/wipe-team/{this_team.id}')
|
|
|
|
return l_message
|
|
|
|
|
|
async def evolve_pokemon(this_team: Team, channel, responders):
|
|
c_query = await db_get(
|
|
'cards',
|
|
params=[('team_id', this_team.id), ('order_by', 'new'), ('limit', 26)]
|
|
)
|
|
logger.info(f'received {c_query['count']} cards, searching now')
|
|
|
|
evolvable_mons = [x for x in c_query['cards'] if x['player']['cardset']['id'] in [23] and x['player']['fangr_id'] is not None and len(x['player']['fangr_id']) > 3]
|
|
logger.info(f'evolvable_mons: {evolvable_mons}')
|
|
|
|
if len(evolvable_mons) > 0:
|
|
evo_target_options = [
|
|
SelectOption(label=f'{x["player"]["rarity"]["name"]} | {x["player"]["p_name"]}', value=x['id']) for x in evolvable_mons
|
|
]
|
|
view = DropdownView(
|
|
dropdown_objects=[SelectPokemonEvolution(options=evo_target_options, this_team=this_team, responders=responders)]
|
|
)
|
|
await channel.send(
|
|
content='What? One of your pokemon is ready to evolve!\n\n-# The selected pokemon will be removed from your team and replaced with its evolution',
|
|
view=view
|
|
)
|
|
else:
|
|
await channel.send('All of your Pokemon are fully evolved!')
|
|
|
|
|
|
async def post_result(run_id: int, is_win: bool, this_team: Team, bot, channel, responders: list[discord.User] = None):
|
|
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, 6]:
|
|
if this_event['id'] == 3:
|
|
cardset_id = 13
|
|
team_id = 58
|
|
elif this_event['id'] == 4:
|
|
cardset_id = 16
|
|
team_id = 79
|
|
elif this_event['id'] == 5:
|
|
cardset_id = 17
|
|
team_id = None
|
|
if x['reward']['pack_type']['id'] == 9:
|
|
cardset_id = 18
|
|
elif this_event['id'] == 6:
|
|
cardset_id = 20
|
|
team_id = None
|
|
if x['reward']['pack_type']['id'] == 9:
|
|
cardset_id = 21
|
|
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'] and this_event['id'] in [7]:
|
|
if this_event['id'] == 7:
|
|
cardset_id = 23
|
|
team_id = 91
|
|
await db_post(
|
|
'packs', payload={'packs': [{
|
|
'team_id': main_team['id'],
|
|
'pack_type_id': x['reward']['pack_type']['id'],
|
|
'pack_cardset_id': cardset_id if x['reward']['pack_type']['id'] != 8 else None,
|
|
'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"]}')
|
|
#
|
|
this_run = await db_patch(
|
|
'gauntletruns',
|
|
object_id=this_run['id'],
|
|
params=[('losses', this_run['losses'] + 1)]
|
|
)
|
|
|
|
l_message = await end_run(this_run, this_event, this_team)
|
|
await channel.send(
|
|
content=l_message,
|
|
embed=await get_embed(this_run)
|
|
)
|
|
|
|
# Evolve a card!
|
|
logger.info(f'Post-game evolution check: Gauntlet ID {this_run["id"]} / Wins: {this_run["wins"]} / Losses: {this_run["losses"]}')
|
|
if this_event['id'] == 7 and this_run['wins'] < 10 and this_run['losses'] < 2:
|
|
logger.info(f'trying to evolve now')
|
|
await evolve_pokemon(this_team, channel, responders)
|
|
|
|
|
|
|