tidyed up some half-inning and game end weirdness, fixed end_delay, added game end pings and summary embeds in discord

This commit is contained in:
Sakimori 2020-12-31 03:32:01 -05:00
parent f4593e1a84
commit 1cf79ce861
4 changed files with 63 additions and 12 deletions

View File

@ -149,6 +149,7 @@ class game(object):
self.last_update = ({},0) #this is a ({outcome}, runs) tuple
self.owner = None
self.ready = False
self.victory_lap = False
if length is not None:
self.max_innings = length
else:

View File

@ -43,11 +43,11 @@ def update_loop():
if test_string == "Game not started.": #weather_emoji
state["update_emoji"] = "🍿" #weather_text
state["update_text"] = "Play blall!" #they also need a timestamp
state["delay"] -= 1
state["start_delay"] -= 1
state["display_top_of_inning"] = state["top_of_inning"]
if state["delay"] <= 0:
if state["start_delay"] <= 0:
if this_game.top_of_inning != state["top_of_inning"]:
state["update_pause"] = 2
state["pitcher"] = "-"
@ -59,8 +59,15 @@ def update_loop():
if state["update_pause"] == 1:
state["update_emoji"] = "🍿"
if this_game.over:
state["display_inning"] -= 1
state["display_top_of_inning"] = False
winning_team = this_game.teams['home'].name if this_game.teams['home'].score > this_game.teams['away'].score else this_game.teams['away'].name
state["update_text"] = f"{winning_team} wins{' with a victory lap' if state['victory_lap'] else ''}!"
if this_game.victory_lap and winning_team == this_game.teams['home'].name:
state["update_text"] = f"{winning_team} wins with a victory lap!"
elif winning_team == this_game.teams['home'].name:
state["update_text"] = f"{winning_team} wins, shaming {this_game.teams['away'].name}!"
else:
state["update_text"] = f"{winning_team} wins!"
state["pitcher"] = "-"
state["batter"] = "-"
elif this_game.top_of_inning:
@ -68,7 +75,7 @@ def update_loop():
else:
if this_game.inning >= this_game.max_innings:
if this_game.teams["home"].score > this_game.teams["away"].score:
state["victory_lap"] = True
this_game.victory_lap = True
state["update_text"] = f"Bottom of {this_game.inning}. {this_game.teams['home'].name} batting!"
elif state["update_pause"] != 1 and test_string != "Game not started.":
@ -103,9 +110,12 @@ def update_loop():
states_to_send[game_time] = state
if state["update_pause"] <= 1 and state["delay"] < 0:
if state["update_pause"] <= 1 and state["start_delay"] < 0:
if this_game.over:
state["update_pause"] = 2
if state["end_delay"] < 0:
master_games_dic.pop(game_time)
state["end_delay"] -= 1
else:
this_game.gamestate_update_full()

View File

@ -103,7 +103,7 @@ $(document).ready(function (){
$('#updateTarget .update_emoji').html(gamestate.update_emoji);
$('#updateTarget .update_text').html(gamestate.update_text);
$('#updateTarget .batting').html((gamestate.top_of_inning ? gamestate.away_name : gamestate.home_name) + " batting.");
$('#updateTarget .batting').html((gamestate.display_top_of_inning ? gamestate.away_name : gamestate.home_name) + " batting.");
gamediv.id = "";
};

View File

@ -355,6 +355,7 @@ def config():
0000
],
"prefix" : ["m;", "m!"],
"simmadome_url" : "",
"soulscream channel id" : 0,
"game_freeze" : 0
}
@ -370,6 +371,8 @@ def config():
async def on_ready():
db.initialcheck()
print(f"logged in as {client.user} with token {config()['token']}")
watch_task = asyncio.create_task(game_watcher())
await watch_task
@client.event
async def on_reaction_add(reaction, user):
@ -557,9 +560,8 @@ async def watch_game(channel, newgame, user = None):
out_emoji = discord.utils.get(client.emojis, id = 791578957241778226)
in_emoji = discord.utils.get(client.emojis, id = 791578957244792832)
if user is not None:
await channel.send(f"Game for {user.mention}:")
embed = await channel.send("Starting...")
await asyncio.sleep(1)
weathers = games.all_weathers()
newgame.weather = weathers[random.choice(list(weathers.keys()))]
@ -572,9 +574,13 @@ async def watch_game(channel, newgame, user = None):
"victory_lap" : False,
"weather_emoji" : newgame.weather.emoji,
"weather_text" : newgame.weather.name,
"delay" : -1
"start_delay" : 3,
"end_delay" : 3
}
await channel.send(f"{newgame.teams['away'].name} vs. {newgame.teams['home'].name}, starting at {config()['simmadome_url']}")
gamesarray.append((newgame, channel, user))
main_controller.master_games_dic[str(time.time() * 1000.0)] = (newgame, state_init)
#while not newgame.over or newgame.top_of_inning != top_of_inning:
@ -869,6 +875,40 @@ async def team_pages(msg, all_teams, search_term=None):
except asyncio.TimeoutError:
return
async def game_watcher():
while True:
this_array = gamesarray.copy()
for i in range(0,len(this_array)):
game, channel, user = this_array[i]
if game.over:
title_string = f"{game.teams['away'].name} at {game.teams['home'].name} ended after {game.inning-1} innings"
if (game.inning - 1) > game.max_innings: #if extra innings
title_string += f" with {game.inning - (game.max_innings+1)} extra innings."
else:
title_string += "."
winning_team = game.teams['home'].name if game.teams['home'].score > game.teams['away'].score else game.teams['away'].name
winstring = f"{game.teams['away'].score} to {game.teams['home'].score}\n"
if game.victory_lap and winning_team == game.teams['home'].name:
winstring += f"{winning_team} wins with a victory lap!"
elif winning_team == game.teams['home'].name:
winstring += f"{winning_team} wins, shaming {game.teams['away'].name}!"
else:
winstring += f"{winning_team} wins!"
if user is not None:
await channel.send(f"{user.mention}'s game just ended.")
else:
await channel.send("A game started from this channel just ended.")
final_embed = discord.Embed(color=discord.Color.dark_purple(), title=title_string)
final_embed.add_field(name="Final score:", value=winstring)
await channel.send(embed=final_embed)
gamesarray.pop(i)
break
await asyncio.sleep(6)
client.run(config()["token"])