Updated scorebug embed
Added play initialization
This commit is contained in:
parent
79efceb6dd
commit
ee685f1415
@ -216,10 +216,16 @@ class Gameplay(commands.Cog):
|
||||
away_role = await team_role(interaction, away_team)
|
||||
home_role = await team_role(interaction, home_team)
|
||||
|
||||
embed = this_game.get_scorebug_embed(session).clear_fields()
|
||||
embed.add_field(
|
||||
name=f'{ai_team.abbrev} Lineup',
|
||||
value=this_game.team_lineup(session, ai_team)
|
||||
)
|
||||
|
||||
await final_message.edit(
|
||||
content=f'{away_role.mention} @ {home_role.mention} is set!\n\n'
|
||||
f'Go ahead and set lineups with the `/read-lineup` command!',
|
||||
embed=this_game.get_scorebug_embed(session)
|
||||
embed=embed
|
||||
)
|
||||
|
||||
@commands.command(name='force-endgame', help='Mod: Force a game to end without stats')
|
||||
@ -233,7 +239,7 @@ class Gameplay(commands.Cog):
|
||||
|
||||
await ctx.send(
|
||||
content=None,
|
||||
embed=this_game.get_scorebug_embed(session, include_lineups=True)
|
||||
embed=this_game.get_scorebug_embed(session, full_length=True)
|
||||
)
|
||||
|
||||
view = Confirm(responders=[ctx.author], timeout=60, label_type='confirm')
|
||||
|
||||
@ -6,7 +6,7 @@ import discord
|
||||
import pydantic
|
||||
|
||||
from sqlmodel import Session, SQLModel, create_engine, select, or_, Field, Relationship
|
||||
from sqlalchemy import func
|
||||
from sqlalchemy import func, desc
|
||||
|
||||
from api_calls import db_get, db_post
|
||||
from exceptions import *
|
||||
@ -154,10 +154,14 @@ class Game(SQLModel, table=True):
|
||||
title=f'{self.away_team.sname} @ {self.home_team.sname}{gt_string}',
|
||||
color=int('a6ce39', 16)
|
||||
)
|
||||
logging.info(f'gameplay_models - Game.get_scorebug_embed - embed: {embed}')
|
||||
|
||||
curr_play = self.current_play_or_none(session)
|
||||
logging.info(f'gameplay_models - Game.get_scorebug_embed - curr_play: {self}')
|
||||
|
||||
if curr_play is None:
|
||||
try:
|
||||
curr_play = self.initialize_play(session)
|
||||
except LineupsMissingException as e:
|
||||
logging.debug(f'gameplay_models - Game.get_scorebug_embed - Could not initialize play')
|
||||
|
||||
if curr_play is not None:
|
||||
embed.add_field(
|
||||
@ -165,7 +169,6 @@ class Game(SQLModel, table=True):
|
||||
value=curr_play.scorebug_ascii,
|
||||
inline=False
|
||||
)
|
||||
logging.info(f'gameplay_models - Game.get_scorebug_embed - embed post gamestate: {embed}')
|
||||
|
||||
if classic:
|
||||
embed.add_field(
|
||||
@ -176,7 +179,6 @@ class Game(SQLModel, table=True):
|
||||
name='Batter',
|
||||
value=curr_play.batter.player.name_card_link('batting')
|
||||
)
|
||||
logging.info(f'gameplay_models - Game.get_scorebug_embed - embed post batter: {embed}')
|
||||
|
||||
baserunner_string = ''
|
||||
if curr_play.on_first is not None:
|
||||
@ -191,18 +193,32 @@ class Game(SQLModel, table=True):
|
||||
embed.add_field(name=' ', value=' ', inline=False)
|
||||
embed.add_field(name='Baserunners', value=baserunner_string)
|
||||
embed.add_field(name='Catcher', value=curr_play.catcher.player.name_card_link)
|
||||
logging.info(f'gameplay_models - Game.get_scorebug_embed - embed post runners: {embed}')
|
||||
|
||||
ai_note = curr_play.ai_note
|
||||
logging.info(f'gameplay_models - Game.get_scorebug_embed - ai_note: {ai_note}')
|
||||
if len(ai_note) > 0:
|
||||
gm_name = self.home_team.gmname if self.ai_team == 'home' else self.away_team.gmname
|
||||
embed.add_field(name=f'{gm_name} will...', value=ai_note, inline=False)
|
||||
else:
|
||||
embed.add_field(name=' ', value=' ', inline=False)
|
||||
|
||||
if full_length:
|
||||
embed.add_field(
|
||||
name=f'{self.away_team.abbrev} Lineup',
|
||||
value=self.team_lineup(session, self.away_team)
|
||||
)
|
||||
embed.add_field(
|
||||
name=f'{self.home_team.abbrev} Lineup',
|
||||
value=self.team_lineup(session, self.home_team)
|
||||
)
|
||||
else:
|
||||
embed.add_field(
|
||||
name='Game State',
|
||||
value='No plays found for this game',
|
||||
inline=False
|
||||
name=f'{self.away_team.abbrev} Lineup',
|
||||
value=self.team_lineup(session, self.away_team)
|
||||
)
|
||||
embed.add_field(
|
||||
name=f'{self.home_team.abbrev} Lineup',
|
||||
value=self.team_lineup(session, self.home_team)
|
||||
)
|
||||
|
||||
return embed
|
||||
@ -252,13 +268,20 @@ class Game(SQLModel, table=True):
|
||||
session.commit()
|
||||
session.refresh(new_play)
|
||||
|
||||
new_play.init_ai()
|
||||
new_play.init_ai(session)
|
||||
|
||||
return new_play
|
||||
|
||||
# @property
|
||||
# def game_prop(self) -> str:
|
||||
# return f'Game {self.id} / Week {self.week_num} / Type {self.game_type}'
|
||||
def team_lineup(self, session: Session, team: Team) -> str:
|
||||
all_lineups = session.exec(select(Lineup).where(Lineup.team == team, Lineup.game == self).order_by(Lineup.batting_order)).all()
|
||||
|
||||
lineup_val = ''
|
||||
for line in all_lineups:
|
||||
lineup_val += f'{line.batting_order}. {line.player.name_card_link("batting" if line.position != "P" else "pitching")} {line.position}\n'
|
||||
|
||||
return lineup_val
|
||||
|
||||
|
||||
|
||||
class ManagerAi(ManagerAiBase, table=True):
|
||||
plays: list['Play'] = Relationship(back_populates='managerai')
|
||||
@ -508,7 +531,7 @@ class PlayBase(SQLModel):
|
||||
batter_id: int = Field(foreign_key='lineup.id')
|
||||
pitcher_id: int = Field(foreign_key='lineup.id')
|
||||
on_base_code: int = Field(default=0)
|
||||
inning_half: str = Field(default='away')
|
||||
inning_half: str = Field(default='top')
|
||||
inning_num: int = Field(default=1, ge=1)
|
||||
batting_order: int = Field(default=1, ge=1, le=9)
|
||||
starting_outs: int = Field(default=0, ge=0, le=2)
|
||||
@ -608,7 +631,7 @@ class Play(PlayBase, table=True):
|
||||
if id > 3 or id < 1:
|
||||
self.managerai_id = 1
|
||||
else:
|
||||
self.managerai = id
|
||||
self.managerai_id = id
|
||||
|
||||
session.add(self)
|
||||
session.commit()
|
||||
@ -621,13 +644,13 @@ class Play(PlayBase, table=True):
|
||||
first_base = unoccupied if not self.on_first else occupied
|
||||
second_base = unoccupied if not self.on_second else occupied
|
||||
third_base = unoccupied if not self.on_third else occupied
|
||||
half = '▲' if self.inning_half == 'Top' else '▼'
|
||||
half = '▲' if self.inning_half == 'top' else '▼'
|
||||
|
||||
if self.game.active:
|
||||
inning = f'{half} {self.inning_num}'
|
||||
outs = f'{self.starting_outs} Out{"s" if self.starting_outs != 1 else ""}'
|
||||
else:
|
||||
inning = f'F/{self.inning_num if self.inning_half == "Bot" else self.inning_num - 1}'
|
||||
inning = f'F/{self.inning_num if self.inning_half == "bot" else self.inning_num - 1}'
|
||||
outs = ''
|
||||
|
||||
game_string = f'```\n' \
|
||||
|
||||
@ -3,7 +3,7 @@ from sqlalchemy import delete as sadelete
|
||||
from sqlalchemy.sql.functions import sum, count
|
||||
from sqlmodel import Session, delete
|
||||
|
||||
from in_game.gameplay_models import Game, Lineup, GameCardsetLink, select
|
||||
from in_game.gameplay_models import Game, Lineup, GameCardsetLink, Play, select
|
||||
from in_game.gameplay_queries import get_channel_game_or_none, get_active_games_by_team
|
||||
from factory import session_fixture
|
||||
|
||||
@ -114,6 +114,11 @@ def test_get_scorebug(session: Session):
|
||||
assert scorebug.title == 'CornBelters @ Black Bears - Minor League'
|
||||
assert scorebug.color.value == int('a6ce39', 16)
|
||||
|
||||
game_3 = session.get(Game, 3)
|
||||
scorebug = game_3.get_scorebug_embed(session)
|
||||
|
||||
assert '0 Outs' in scorebug.fields[0].value
|
||||
|
||||
|
||||
def test_sum_function(session: Session):
|
||||
"""
|
||||
@ -131,3 +136,23 @@ def test_sum_function(session: Session):
|
||||
print(f'sum: {one_result[0]} / count: {one_result[1]}')
|
||||
|
||||
assert False == False
|
||||
|
||||
|
||||
def test_initialize_play(session: Session):
|
||||
game_1 = session.get(Game, 1)
|
||||
game_3 = session.get(Game, 3)
|
||||
g1_play = game_1.initialize_play(session)
|
||||
|
||||
assert game_1.id == 1
|
||||
|
||||
play_count = session.exec(select(Play.id)).all()
|
||||
|
||||
assert len(play_count) == 2
|
||||
|
||||
g3_play = game_3.initialize_play(session)
|
||||
play_count = session.exec(select(Play.id)).all()
|
||||
|
||||
assert g3_play.play_num == 1
|
||||
assert g3_play.starting_outs == 0
|
||||
assert len(play_count) == 3
|
||||
|
||||
|
||||
@ -37,7 +37,7 @@ def test_scorebug_ascii(session: Session):
|
||||
session.add(new_play)
|
||||
session.commit()
|
||||
|
||||
assert new_play.scorebug_ascii == '```\nNCB3 0 ○ ▼ 6\n WV4 0 ○ ○ 1 Out\n```'
|
||||
assert new_play.scorebug_ascii == '```\nNCB3 0 ○ ▲ 6\n WV4 0 ○ ○ 1 Out\n```'
|
||||
|
||||
|
||||
# TODO: test get_ai_note
|
||||
Loading…
Reference in New Issue
Block a user