added m;leagueschedule
This commit is contained in:
parent
5eec52db62
commit
af7112367d
24
leagues.py
24
leagues.py
|
@ -233,6 +233,8 @@ class league_structure(object):
|
||||||
teams.sort(key=sorter, reverse=True)
|
teams.sort(key=sorter, reverse=True)
|
||||||
return teams
|
return teams
|
||||||
|
|
||||||
|
def season_length(self):
|
||||||
|
return self.constraints["division_games"]*(len(random.choice(random.choice(league))-1)) + self.constraints["inter_div_games"] + self.constraints["inter_league_games"]
|
||||||
|
|
||||||
def standings_embed(self):
|
def standings_embed(self):
|
||||||
this_embed = Embed(color=Color.purple(), title=self.name)
|
this_embed = Embed(color=Color.purple(), title=self.name)
|
||||||
|
@ -242,7 +244,6 @@ class league_structure(object):
|
||||||
for subleague in iter(self.league.keys()):
|
for subleague in iter(self.league.keys()):
|
||||||
this_embed.add_field(name="Subleague:", value=f"**{subleague}**", inline = False)
|
this_embed.add_field(name="Subleague:", value=f"**{subleague}**", inline = False)
|
||||||
for division in iter(self.league[subleague].keys()):
|
for division in iter(self.league[subleague].keys()):
|
||||||
this_embed.add_field(name="Division:", value=f"**{division}**", inline = False)
|
|
||||||
teams = self.division_standings(self.league[subleague][division], standings)
|
teams = self.division_standings(self.league[subleague][division], standings)
|
||||||
|
|
||||||
for index in range(0, len(teams)):
|
for index in range(0, len(teams)):
|
||||||
|
@ -251,14 +252,16 @@ class league_structure(object):
|
||||||
else:
|
else:
|
||||||
games_behind = ((teams[self.constraints["division_leaders"] - 1][1] - teams[index][1]) + (teams[index][2] - teams[self.constraints["division_leaders"] - 1][2]))/2
|
games_behind = ((teams[self.constraints["division_leaders"] - 1][1] - teams[index][1]) + (teams[index][2] - teams[self.constraints["division_leaders"] - 1][2]))/2
|
||||||
teams[index][4] = games_behind
|
teams[index][4] = games_behind
|
||||||
|
teams_string = ""
|
||||||
for this_team in teams:
|
for this_team in teams:
|
||||||
if this_team[2] != 0 or this_team[1] != 0:
|
if this_team[2] != 0 or this_team[1] != 0:
|
||||||
this_embed.add_field(name=this_team[0].name, value=f"{this_team[1]} - {this_team[2]} WR: {round(this_team[1]/(this_team[1]+this_team[2]), 3)} GB: {this_team[4]}", inline = False)
|
teams_string += f"**{this_team[0].name}\n**{this_team[1]} - {this_team[2]} WR: {round(this_team[1]/(this_team[1]+this_team[2]), 3)} GB: {this_team[4]}\n\n"
|
||||||
else:
|
else:
|
||||||
this_embed.add_field(name=this_team[0].name, value=f"{this_team[1]} - {this_team[2]} WR: - GB: {this_team[4]}", inline = False)
|
teams_string += f"**{this_team[0].name}\n**{this_team[1]} - {this_team[2]} WR: - GB: {this_team[4]}\n\n"
|
||||||
|
|
||||||
this_embed.set_footer(text=f"Standings as of day {self.day-1}")
|
this_embed.add_field(name=f"{division} Division:", value=teams_string, inline = False)
|
||||||
|
|
||||||
|
this_embed.set_footer(text=f"Standings as of day {self.day-1} / {self.season_length()")
|
||||||
return this_embed
|
return this_embed
|
||||||
|
|
||||||
def wildcard_embed(self):
|
def wildcard_embed(self):
|
||||||
|
@ -267,14 +270,13 @@ class league_structure(object):
|
||||||
for team_name, wins, losses, run_diff in league_db.get_standings(self.name):
|
for team_name, wins, losses, run_diff in league_db.get_standings(self.name):
|
||||||
standings[team_name] = {"wins" : wins, "losses" : losses, "run_diff" : run_diff}
|
standings[team_name] = {"wins" : wins, "losses" : losses, "run_diff" : run_diff}
|
||||||
for subleague in iter(self.league.keys()):
|
for subleague in iter(self.league.keys()):
|
||||||
this_embed.add_field(name="Subleague:", value=f"**{subleague}**", inline = False)
|
|
||||||
subleague_array = []
|
subleague_array = []
|
||||||
for division in iter(self.league[subleague].keys()):
|
for division in iter(self.league[subleague].keys()):
|
||||||
this_div = [this_team for this_team, wins, losses, diff, gb in self.division_standings(self.league[subleague][division], standings)[self.constraints["division_leaders"]:]]
|
this_div = [this_team for this_team, wins, losses, diff, gb in self.division_standings(self.league[subleague][division], standings)[self.constraints["division_leaders"]:]]
|
||||||
subleague_array += this_div
|
subleague_array += this_div
|
||||||
|
|
||||||
teams = self.division_standings(subleague_array, standings)
|
teams = self.division_standings(subleague_array, standings)
|
||||||
|
teams_string = ""
|
||||||
for index in range(0, len(teams)):
|
for index in range(0, len(teams)):
|
||||||
if index == self.constraints["wild_cards"] - 1:
|
if index == self.constraints["wild_cards"] - 1:
|
||||||
teams[index][4] = "-"
|
teams[index][4] = "-"
|
||||||
|
@ -284,9 +286,11 @@ class league_structure(object):
|
||||||
|
|
||||||
for this_team in teams:
|
for this_team in teams:
|
||||||
if this_team[2] != 0 or this_team[1] != 0:
|
if this_team[2] != 0 or this_team[1] != 0:
|
||||||
this_embed.add_field(name=this_team[0].name, value=f"{this_team[1]} - {this_team[2]} WR: {round(this_team[1]/(this_team[1]+this_team[2]), 3)} GB: {this_team[4]}", inline = False)
|
teams_string += f"**{this_team[0].name}\n**{this_team[1]} - {this_team[2]} WR: {round(this_team[1]/(this_team[1]+this_team[2]), 3)} GB: {this_team[4]}\n\n"
|
||||||
else:
|
else:
|
||||||
this_embed.add_field(name=this_team[0].name, value=f"{this_team[1]} - {this_team[2]} WR: - GB: {this_team[4]}", inline = False)
|
teams_string += f"**{this_team[0].name}\n**{this_team[1]} - {this_team[2]} WR: - GB: {this_team[4]}\n\n"
|
||||||
|
|
||||||
|
this_embed.add_field(name=f"{subleague} League:", value=teams_string, inline = False)
|
||||||
|
|
||||||
this_embed.set_footer(text=f"Wildcard standings as of day {self.day-1}")
|
this_embed.set_footer(text=f"Wildcard standings as of day {self.day-1}")
|
||||||
return this_embed
|
return this_embed
|
||||||
|
@ -313,7 +317,7 @@ class league_structure(object):
|
||||||
for this_team, wins, losses, diff, gb in division_leaders + wildcard_leaders:
|
for this_team, wins, losses, diff, gb in division_leaders + wildcard_leaders:
|
||||||
team_dic[this_team] = {"wins" : wins}
|
team_dic[this_team] = {"wins" : wins}
|
||||||
|
|
||||||
subleague_tournament = tournament(f"{self.name} {subleague} Championship Series", team_dic, secs_between_games=int(3600/self.games_per_hour), secs_between_rounds=int(7200/self.games_per_hour))
|
subleague_tournament = tournament(f"{self.name} {subleague} Championship Series", team_dic, series_length=3, finals_series_length=5, secs_between_games=int(3600/self.games_per_hour), secs_between_rounds=int(7200/self.games_per_hour))
|
||||||
subleague_tournament.build_bracket(by_wins = True)
|
subleague_tournament.build_bracket(by_wins = True)
|
||||||
subleague_tournament.league = self
|
subleague_tournament.league = self
|
||||||
tournaments.append(subleague_tournament)
|
tournaments.append(subleague_tournament)
|
||||||
|
|
|
@ -764,6 +764,10 @@ class StartLeagueCommand(Command):
|
||||||
Plays a league with a given name, provided that league has been saved on the website. The games per hour sets how often the games will start. (e.g. GPH 2 will start games at X:00 and X:30)"""
|
Plays a league with a given name, provided that league has been saved on the website. The games per hour sets how often the games will start. (e.g. GPH 2 will start games at X:00 and X:30)"""
|
||||||
|
|
||||||
async def execute(self, msg, command):
|
async def execute(self, msg, command):
|
||||||
|
if config()["game_freeze"]:
|
||||||
|
await msg.channel.send("Patch incoming. We're not allowing new games right now.")
|
||||||
|
return
|
||||||
|
|
||||||
league_name = command.split("-")[0].split("\n")[0].strip()
|
league_name = command.split("-")[0].split("\n")[0].strip()
|
||||||
autoplay = None
|
autoplay = None
|
||||||
|
|
||||||
|
@ -851,6 +855,33 @@ class LeaguePauseCommand(Command):
|
||||||
if active_league.name == league_name:
|
if active_league.name == league_name:
|
||||||
active_league.autoplay = 0
|
active_league.autoplay = 0
|
||||||
await msg.channel.send(f"Loud and clear, chief. {league_name} will stop after this series is over.")
|
await msg.channel.send(f"Loud and clear, chief. {league_name} will stop after this series is over.")
|
||||||
|
|
||||||
|
class LeagueScheduleCommand(Command):
|
||||||
|
name = "leagueschedule"
|
||||||
|
template = "m;leagueschedule [league name]"
|
||||||
|
description = "Sends an embed with the given league's schedule for the next 4 series."
|
||||||
|
|
||||||
|
async def execute(self, msg, command):
|
||||||
|
league_name = command.strip()
|
||||||
|
if league_exists(league_name):
|
||||||
|
league = leagues.load_league_file(league_name)
|
||||||
|
current_series = league.day_to_series_num(league.day)
|
||||||
|
if str(current_series+1) in league.schedule.keys():
|
||||||
|
sched_embed = discord.Embed(title=f"{league.name}'s Schedule:")
|
||||||
|
days = [0,1,2,3]
|
||||||
|
for day in days:
|
||||||
|
if str(current_series+day) in league.schedule.keys():
|
||||||
|
schedule_text = ""
|
||||||
|
for game in league.schedule[str(current_series+day)]:
|
||||||
|
schedule_text += f"**{game[0]}** @ **{game[1]}**\n"
|
||||||
|
sched_embed.add_field(name=f"Days {((current_series+day-1)*league.series_length) + 1} - {(current_series+day)*(league.series_length)}", value=schedule_text, inline = False)
|
||||||
|
await msg.channel.send(embed=sched_embed)
|
||||||
|
else:
|
||||||
|
await msg.channel.send("That league's already finished with this season, boss.")
|
||||||
|
else:
|
||||||
|
await msg.channel.send("We can't find that league. Typo?")
|
||||||
|
|
||||||
|
|
||||||
commands = [
|
commands = [
|
||||||
IntroduceCommand(),
|
IntroduceCommand(),
|
||||||
CountActiveGamesCommand(),
|
CountActiveGamesCommand(),
|
||||||
|
@ -875,6 +906,7 @@ commands = [
|
||||||
LeaguePauseCommand(),
|
LeaguePauseCommand(),
|
||||||
LeagueDisplayCommand(),
|
LeagueDisplayCommand(),
|
||||||
LeagueWildcardCommand(),
|
LeagueWildcardCommand(),
|
||||||
|
LeagueScheduleCommand(),
|
||||||
StartRandomGameCommand(),
|
StartRandomGameCommand(),
|
||||||
CreditCommand(),
|
CreditCommand(),
|
||||||
RomanCommand(),
|
RomanCommand(),
|
||||||
|
@ -1162,7 +1194,6 @@ async def start_tournament_round(channel, tourney, seeding = None):
|
||||||
if tourney.league is not None:
|
if tourney.league is not None:
|
||||||
team_a.set_pitcher(rotation_slot = tourney.league.day)
|
team_a.set_pitcher(rotation_slot = tourney.league.day)
|
||||||
team_b.set_pitcher(rotation_slot = tourney.league.day)
|
team_b.set_pitcher(rotation_slot = tourney.league.day)
|
||||||
league.day += 1
|
|
||||||
|
|
||||||
this_game = games.game(team_a.finalize(), team_b.finalize(), length = tourney.game_length)
|
this_game = games.game(team_a.finalize(), team_b.finalize(), length = tourney.game_length)
|
||||||
this_game, state_init = prepare_game(this_game)
|
this_game, state_init = prepare_game(this_game)
|
||||||
|
@ -1199,7 +1230,7 @@ async def continue_tournament_series(tourney, queue, games_list, wins_in_series)
|
||||||
if tourney.league is not None:
|
if tourney.league is not None:
|
||||||
away_team.set_pitcher(rotation_slot = tourney.league.day)
|
away_team.set_pitcher(rotation_slot = tourney.league.day)
|
||||||
home_team.set_pitcher(rotation_slot = tourney.league.day)
|
home_team.set_pitcher(rotation_slot = tourney.league.day)
|
||||||
league.day += 1
|
|
||||||
|
|
||||||
this_game = games.game(away_team.finalize(), home_team.finalize(), length = tourney.game_length)
|
this_game = games.game(away_team.finalize(), home_team.finalize(), length = tourney.game_length)
|
||||||
this_game, state_init = prepare_game(this_game)
|
this_game, state_init = prepare_game(this_game)
|
||||||
|
@ -1261,7 +1292,8 @@ async def tourney_round_watcher(channel, tourney, games_list, filter_url, finals
|
||||||
except:
|
except:
|
||||||
print("something went wrong in tourney_watcher")
|
print("something went wrong in tourney_watcher")
|
||||||
await asyncio.sleep(4)
|
await asyncio.sleep(4)
|
||||||
|
if tourney.league is not None:
|
||||||
|
tourney.league.day += 1
|
||||||
|
|
||||||
if len(queued_games) > 0:
|
if len(queued_games) > 0:
|
||||||
|
|
||||||
|
@ -1751,9 +1783,11 @@ async def league_day_watcher(channel, league, games_list, filter_url, last = Fal
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if league.autoplay == 0: #if number of series to autoplay has been reached
|
if league.autoplay == 0 or config()["game_freeze"]: #if number of series to autoplay has been reached
|
||||||
await channel.send(embed=league.standings_embed())
|
await channel.send(embed=league.standings_embed())
|
||||||
await channel.send(f"The {league.name} is no longer autoplaying.")
|
await channel.send(f"The {league.name} is no longer autoplaying.")
|
||||||
|
if config()["game_freeze"]:
|
||||||
|
await channel.send("Patch incoming.")
|
||||||
leagues.save_league(league)
|
leagues.save_league(league)
|
||||||
active_leagues.pop(active_leagues.index(league))
|
active_leagues.pop(active_leagues.index(league))
|
||||||
return
|
return
|
||||||
|
|
Loading…
Reference in New Issue
Block a user