diff --git a/cogs/gameplay.py b/cogs/gameplay.py index f05a3ca..6d2d573 100644 --- a/cogs/gameplay.py +++ b/cogs/gameplay.py @@ -337,6 +337,15 @@ class Gameplay(commands.Cog): game_state['pitcher'] = pitcher game_state['catcher'] = catcher game_state['channel_id'] = game.channel_id + + if curr_play.inning_half == 'Top': + game_state['pitcher']['team'] = home_team + game_state['catcher']['team'] = home_team + game_state['batter']['team'] = away_team + else: + game_state['pitcher']['team'] = away_team + game_state['catcher']['team'] = away_team + game_state['batter']['team'] = home_team logging.debug(f'game_state: {game_state}') return game_state diff --git a/db_calls.py b/db_calls.py index 31221b6..1501022 100644 --- a/db_calls.py +++ b/db_calls.py @@ -1,3 +1,7 @@ +import datetime +from dataclasses import dataclass +from typing import Optional + import requests import logging import json @@ -7,11 +11,73 @@ AUTH_TOKEN = {'Authorization': f'Bearer {os.environ.get("API_TOKEN")}'} DB_URL = 'https://pd.manticorum.com/api' master_debug = True alt_database = True +PLAYER_CACHE = {} if alt_database == 'dev': DB_URL = 'https://pddev.manticorum.com/api' +@dataclass +class Player: + player_id: int + p_name: str + cost: int + image: str + mlbclub: str + franchise: str + cardset: dict + set_num: int + rarity: dict + pos_1: str + description: str + quantity: Optional[int] = 999 + image2: Optional[str] = None + pos_2: Optional[str] = None + pos_3: Optional[str] = None + pos_4: Optional[str] = None + pos_5: Optional[str] = None + pos_6: Optional[str] = None + pos_7: Optional[str] = None + pos_8: Optional[str] = None + headshot: Optional[str] = None + vanity_card: Optional[str] = None + strat_code: Optional[str] = None + bbref_id: Optional[str] = None + fangr_id: Optional[str] = None + mlbplayer: Optional[dict] = None + created: datetime.datetime = datetime.datetime.now() + + def to_dict(self): + return { + 'player_id': self.player_id, + 'p_name': self.p_name, + 'cost': self.cost, + 'image': self.image, + 'mlbclub': self.mlbclub, + 'franchise': self.franchise, + 'cardset': self.cardset, + 'set_num': self.set_num, + 'rarity': self.rarity, + 'pos_1': self.pos_1, + 'description': self.description, + 'quantity': self.quantity, + 'image2': self.image2, + 'pos_2': self.pos_2, + 'pos_3': self.pos_3, + 'pos_4': self.pos_4, + 'pos_5': self.pos_5, + 'pos_6': self.pos_6, + 'pos_7': self.pos_7, + 'pos_8': self.pos_8, + 'headshot': self.headshot, + 'vanity_card': self.vanity_card, + 'strat_code': self.strat_code, + 'bbref_id': self.bbref_id, + 'fangr_id': self.fangr_id, + 'mlbplayer': self.mlbplayer + } + + def param_char(other_params): if other_params: return '&' @@ -19,7 +85,7 @@ def param_char(other_params): return '?' -def get_req_url(endpoint: str, api_ver: int = 1, object_id: int = None, params: list = None): +def get_req_url(endpoint: str, api_ver: int = 2, object_id: int = None, params: list = None): req_url = f'{DB_URL}/v{api_ver}/{endpoint}{"/" if object_id is not None else ""}{object_id if object_id is not None else ""}' if params: @@ -31,7 +97,7 @@ def get_req_url(endpoint: str, api_ver: int = 1, object_id: int = None, params: return req_url -async def db_get(endpoint: str, api_ver: int = 1, object_id: int = None, params: list = None, none_okay: bool = True, +async def db_get(endpoint: str, api_ver: int = 2, object_id: int = None, params: list = None, none_okay: bool = True, timeout: int = 3): req_url = get_req_url(endpoint, api_ver=api_ver, object_id=object_id, params=params) log_string = f'get:\n{endpoint} id: {object_id} params: {params}' @@ -71,7 +137,7 @@ async def db_get(endpoint: str, api_ver: int = 1, object_id: int = None, params: raise ValueError(f'DB: {resp.text}') -async def db_patch(endpoint: str, object_id: int, params: list, api_ver: int = 1, timeout: int = 3): +async def db_patch(endpoint: str, object_id: int, params: list, api_ver: int = 2, timeout: int = 3): req_url = get_req_url(endpoint, api_ver=api_ver, object_id=object_id, params=params) log_string = f'patch:\n{endpoint} {params}' logging.info(log_string) if master_debug else logging.debug(log_string) @@ -102,7 +168,7 @@ async def db_patch(endpoint: str, object_id: int, params: list, api_ver: int = 1 raise ValueError(f'DB: {resp.text}') -async def db_post(endpoint: str, api_ver: int = 1, payload: dict = None, timeout: int = 3): +async def db_post(endpoint: str, api_ver: int = 2, payload: dict = None, timeout: int = 3): req_url = get_req_url(endpoint, api_ver=api_ver) log_string = f'post:\n{endpoint} payload: {payload}\ntype: {type(payload)}' logging.info(log_string) if master_debug else logging.debug(log_string) @@ -133,7 +199,7 @@ async def db_post(endpoint: str, api_ver: int = 1, payload: dict = None, timeout raise ValueError(f'DB: {resp.text}') -async def db_delete(endpoint: str, object_id: int, api_ver: int = 1, timeout=3): +async def db_delete(endpoint: str, object_id: int, api_ver: int = 2, timeout=3): req_url = get_req_url(endpoint, api_ver=api_ver, object_id=object_id) log_string = f'delete:\n{endpoint} {object_id}' logging.info(log_string) if master_debug else logging.debug(log_string) @@ -182,5 +248,26 @@ def team_hash(team): return hash_string +async def get_pd_player(player_id, as_dict: Optional[bool] = True): + if player_id in PLAYER_CACHE: + tdelta = datetime.datetime.now() - PLAYER_CACHE[player_id].created + if tdelta.total_seconds() < 1209600: + logging.info(f'this_player: {PLAYER_CACHE[player_id]}') + if as_dict: + return PLAYER_CACHE[player_id].to_dict() + else: + return PLAYER_CACHE[player_id] + else: + logging.error(f'Refreshing player {player_id} in cache...') + this_player = await db_get('players', object_id=player_id) + for bad_key in ['mlbplayer', 'paperdex']: + if bad_key in this_player: + del this_player[bad_key] + logging.debug(f'this_player: {this_player}') + PLAYER_CACHE[player_id] = Player(**this_player) + + if as_dict: + return this_player + return PLAYER_CACHE[player_id] diff --git a/db_calls_gameplay.py b/db_calls_gameplay.py index 9834ea9..1d938a9 100644 --- a/db_calls_gameplay.py +++ b/db_calls_gameplay.py @@ -12,7 +12,7 @@ from playhouse.shortcuts import model_to_dict from dataclasses import dataclass from helpers import SBA_SEASON, PD_SEASON, get_player_url, get_sheets -from db_calls import db_get +from db_calls import db_get, get_pd_player db = SqliteDatabase( 'storage/gameplay.db', @@ -786,6 +786,8 @@ def undo_subs(game: StratGame, new_play_num: int): async def get_player(game, lineup_member) -> dict: # await asyncio.sleep(0.1) + return await get_pd_player(lineup_member.player_id) + if isinstance(game, Game): if game.is_pd: this_card = await db_get(f'cards', object_id=lineup_member.card_id)