def embed_tourney_start(start_date, utc_now, colour=None): fields = [] currently_running = is_tourney_running(start_date, utc_now) starts = get_start_string(currently_running) start_date_formatted = util.get_formatted_date(start_date, True, False) tourney_month = start_date.strftime('%B') delta_start = start_date - utc_now delta_start_formatted = util.get_formatted_timedelta(delta_start) delta_start_txt = f'{delta_start_formatted} ({start_date_formatted})' if currently_running: fields.append( util.get_embed_field_def(starts.capitalize(), start_date_formatted, True)) else: fields.append( util.get_embed_field_def(starts.capitalize(), delta_start_txt, True)) if currently_running: end_date = util.get_first_of_following_month(start_date) delta_end = end_date - utc_now delta_end_formatted = util.get_formatted_timedelta(delta_end, False) fields.append( util.get_embed_field_def('Ends', delta_end_formatted, True)) result = util.create_embed(f'{tourney_month} tournament', None, colour, fields) return result
def _get_fleet_sheet_lines(fleet_users_infos: dict, retrieval_date: datetime, fleet_name: str = None) -> list: result = [FLEET_SHEET_COLUMN_NAMES] for user_info in fleet_users_infos.values(): logged_in_ago = retrieval_date - util.parse_pss_datetime( user_info['LastLoginDate']) joined_ago = retrieval_date - util.parse_pss_datetime( user_info['AllianceJoinDate']) if fleet_name is None and FLEET_DESCRIPTION_PROPERTY_NAME in user_info.keys( ): fleet_name = user_info[FLEET_DESCRIPTION_PROPERTY_NAME] line = [ util.format_excel_datetime(retrieval_date), fleet_name, user_info[user.USER_DESCRIPTION_PROPERTY_NAME], user_info['AllianceMembership'], util.convert_pss_timestamp_to_excel(user_info['LastLoginDate']), int(user_info['Trophy']), int(user_info['AllianceScore']), util.convert_pss_timestamp_to_excel(user_info['AllianceJoinDate']), util.get_formatted_timedelta(logged_in_ago, include_relative_indicator=False), util.get_formatted_timedelta(joined_ago, include_relative_indicator=False) ] result.append(line) return result
def __init__(self, research_info: dict, researches_designs_data: dict): self.__cost: str = _get_costs_from_research_info(research_info) self.__research_time_seconds: int = int(research_info['ResearchTime']) self.__required_lab_level: str = research_info['RequiredLabLevel'] self.__required_research_design_id: str = research_info[ 'RequiredResearchDesignId'] self.__research_timedelta: timedelta = timedelta( seconds=self.__research_time_seconds) self.__duration: int = util.get_formatted_timedelta( self.__research_timedelta, include_relative_indicator=False) if self.__required_research_design_id != '0': self.__required_research_name = researches_designs_data[ self.__required_research_design_id][ RESEARCH_DESIGN_DESCRIPTION_PROPERTY_NAME] else: self.__required_research_name = None details_long: List[Tuple[str, str]] = [ ('Cost', self.__cost), ('Duration', self.__duration), ('Required LAB lvl', self.__required_lab_level), ('Required Research', self.__required_research_name) ] details_short: List[Tuple[str, str, bool]] = [ (None, self.__cost, False), (None, self.__duration, False), ('LAB lvl', self.__required_lab_level, False) ] super().__init__( name=research_info[RESEARCH_DESIGN_DESCRIPTION_PROPERTY_NAME], description=research_info['ResearchDescription'], details_long=details_long, details_short=details_short)
def get_research_details_from_data_as_text(research_info: dict, research_designs_data: dict = None) -> list: if not research_designs_data: research_designs_data = __research_designs_cache.get_data_dict3() name = research_info[RESEARCH_DESIGN_DESCRIPTION_PROPERTY_NAME] description = research_info['ResearchDescription'] costs = _get_costs_from_research_info(research_info) research_time_seconds = int(research_info['ResearchTime']) research_timedelta = timedelta(seconds=research_time_seconds) duration = util.get_formatted_timedelta(research_timedelta, include_relative_indicator=False) required_lab_level = research_info['RequiredLabLevel'] required_research_design_id = research_info['RequiredResearchDesignId'] if required_research_design_id != '0': required_research_name = research_designs_data[required_research_design_id][RESEARCH_DESIGN_DESCRIPTION_PROPERTY_NAME] else: required_research_name = None result = [f'**{name}**'] result.append(description) result.append(f'Cost: {costs}') result.append(f'Duration: {duration}') result.append(f'Required LAB lvl: {required_lab_level}') if required_research_name: result.append(f'Required Research: {required_research_name}') return result
def get_research_details_short_from_data_as_text(research_info: dict) -> list: name = research_info[RESEARCH_DESIGN_DESCRIPTION_PROPERTY_NAME] costs = _get_costs_from_research_info(research_info) research_time_seconds = int(research_info['ResearchTime']) research_timedelta = timedelta(seconds=research_time_seconds) duration = util.get_formatted_timedelta(research_timedelta, include_relative_indicator=False) required_lab_level = research_info['RequiredLabLevel'] return [f'**{name}**: {costs} - {duration} - LAB lvl {required_lab_level}']
def format_tourney_start(start_date, utc_now): currently_running = is_tourney_running(start_date, utc_now) starts = get_start_string(currently_running) start_date_formatted = util.get_formatted_date(start_date, True, False) tourney_month = start_date.strftime('%B') delta_start = start_date - utc_now delta_start_formatted = util.get_formatted_timedelta(delta_start) delta_start_txt = f'**{delta_start_formatted}** ({start_date_formatted})' delta_end_txt = '' if currently_running: end_date = util.get_first_of_following_month(start_date) end_date_formatted = util.get_formatted_date(end_date, True, False) delta_end = end_date - utc_now delta_end_formatted = util.get_formatted_timedelta(delta_end, False) delta_end_txt = f' and goes on for another **{delta_end_formatted}** (until {end_date_formatted})' result = f'Tournament in **{tourney_month}** {starts} {delta_start_txt}{delta_end_txt}' return result
def _get_fleet_sheet_lines(fleet_users_infos: dict, retrieved_at: datetime, max_tourney_battle_attempts: int = None, fleet_name: str = None, include_player_id: bool = False, include_fleet_id: bool = False) -> list: result = [FLEET_SHEET_COLUMN_NAMES] if include_player_id: result[0].append('Player ID') if include_fleet_id: result[0].append('Fleet ID') tourney_running = tourney.is_tourney_running(retrieved_at) for user_info in fleet_users_infos.values(): last_login_date = user_info.get('LastLoginDate') alliance_join_date = user_info.get('AllianceJoinDate') logged_in_ago = None joined_ago = None if last_login_date: logged_in_ago = retrieved_at - util.parse_pss_datetime(last_login_date) if alliance_join_date: joined_ago = retrieved_at - util.parse_pss_datetime(alliance_join_date) if fleet_name is None and FLEET_DESCRIPTION_PROPERTY_NAME in user_info.keys(): fleet_name = user_info[FLEET_DESCRIPTION_PROPERTY_NAME] attempts_left = None if tourney_running: attempts = user.__get_tourney_battle_attempts(user_info, retrieved_at) if attempts and max_tourney_battle_attempts: attempts_left = max_tourney_battle_attempts - attempts line = [ util.format_excel_datetime(retrieved_at), fleet_name or user_info.get(FLEET_DESCRIPTION_PROPERTY_NAME, user_info.get('Alliance', {}).get(FLEET_DESCRIPTION_PROPERTY_NAME, '')), user_info.get(user.USER_DESCRIPTION_PROPERTY_NAME, ''), user_info.get('AllianceMembership', ''), util.convert_pss_timestamp_to_excel(last_login_date), int(user_info['Trophy']) if 'Trophy' in user_info else '', int(user_info['AllianceScore'] if 'AllianceScore' in user_info else ''), util.convert_pss_timestamp_to_excel(alliance_join_date), int(user_info['CrewDonated']) if 'CrewDonated' in user_info else '', int(user_info['CrewReceived']) if 'CrewReceived' in user_info else '', util.get_formatted_timedelta(logged_in_ago, include_relative_indicator=False), util.get_formatted_timedelta(joined_ago, include_relative_indicator=False), attempts_left or '', user_info.get(user.USER_KEY_NAME, '') if include_player_id else '', user_info.get(FLEET_KEY_NAME, '') if include_fleet_id else '' ] result.append(line) return result
def __format_timestamp(timestamp: datetime, retrieved_at: datetime) -> str: retrieved_ago = util.get_formatted_timedelta(timestamp - retrieved_at, include_seconds=False) result = f'{util.format_excel_datetime(timestamp, include_seconds=False)} ({retrieved_ago})' return result
def get_user_details_by_info(user_info: dict) -> list: user_id = user_info[USER_KEY_NAME] utc_now = util.get_utcnow() inspect_ship_info = ship.get_inspect_ship_for_user(user_id) ship_info = {} for key in inspect_ship_info.keys(): if key != user_id: ship_info = inspect_ship_info[key] fleet_id = user_info['AllianceId'] created_on_date = util.parse_pss_datetime(user_info['CreationDate']) crew_donated = user_info['CrewDonated'] crew_received = user_info['CrewReceived'] defense_draws = int(user_info['PVPDefenceDraws']) defense_losses = int(user_info['PVPDefenceLosses']) defense_wins = int(user_info['PVPDefenceWins']) highest_trophies = user_info['HighestTrophy'] logged_in_date = util.parse_pss_datetime(user_info['LastLoginDate']) pvp_draws = int(user_info['PVPAttackDraws']) pvp_losses = int(user_info['PVPAttackLosses']) pvp_wins = int(user_info['PVPAttackWins']) ship_status = ship_info.get('ShipStatus', '<unknown>') stars = user_info['AllianceScore'] trophies = int(user_info['Trophy']) user_name = user_info[USER_DESCRIPTION_PROPERTY_NAME] user_type = user_info['UserType'] has_fleet = fleet_id != '0' if has_fleet: fleet_info = fleet._get_fleet_info_by_id(fleet_id) if fleet_info: division_design_id = fleet_info['DivisionDesignId'] fleet_join_date = util.parse_pss_datetime( user_info['AllianceJoinDate']) fleet_joined_ago = util.get_formatted_timedelta(fleet_join_date - utc_now) fleet_name = fleet_info[fleet.FLEET_DESCRIPTION_PROPERTY_NAME] fleet_rank = lookups.get_lookup_value_or_default( lookups.ALLIANCE_MEMBERSHIP, user_info['AllianceMembership'], user_info['AllianceMembership']) fleet_name_and_rank = f'{fleet_name} ({fleet_rank})' joined = f'{util.format_excel_datetime(fleet_join_date)} ({fleet_joined_ago})' else: division_design_id = '0' fleet_name_and_rank = '<unknown>' joined = '-' else: division_design_id = '0' fleet_name_and_rank = '<no fleet>' joined = '-' created_ago = util.get_formatted_timedelta(created_on_date - utc_now) created = f'{util.format_excel_datetime(created_on_date)} ({created_ago})' defense_win_rate = _calculate_win_rate(defense_wins, defense_losses, defense_draws) division = lookups.get_lookup_value_or_default( lookups.DIVISION_DESIGN_ID_TO_CHAR, division_design_id, '-') league_name = _get_league_from_trophies(trophies) level = None if user_id: level = ship.get_ship_level(ship_info) if level is None: level = '-' logged_in_ago = util.get_formatted_timedelta(logged_in_date - utc_now) logged_in = f'{util.format_excel_datetime(logged_in_date)} ({logged_in_ago})' pvp_win_rate = _calculate_win_rate(pvp_wins, pvp_losses, pvp_draws) status = lookups.get_lookup_value_or_default(lookups.USER_STATUS, ship_status, default=ship_status) user_type = lookups.get_lookup_value_or_default(lookups.USER_TYPE, user_type, user_type) lines = [f'**```{user_name}```**```'] lines.append(f'Account created: {created}') lines.append(f'Last login: {logged_in}') lines.append(f'Fleet: {fleet_name_and_rank}') if has_fleet: lines.append(f'Joined fleet: {joined}') lines.append(f'League: {league_name}') lines.append(f'Trophies: {trophies}') lines.append(f'Highest trophies: {highest_trophies}') if has_fleet: lines.append(f'Division: {division}') if stars != '0': lines.append(f'Stars: {stars}') if has_fleet: lines.append(f'Crew donated: {crew_donated}') lines.append(f'Crew borrowed: {crew_received}') lines.append( f'PVP win/lose/draw: {pvp_wins}/{pvp_losses}/{pvp_draws} ({pvp_win_rate:0.2f}%)' ) lines.append( f'Defense win/lose/draw: {defense_wins}/{defense_losses}/{defense_draws} ({defense_win_rate:0.2f}%)' ) lines.append(f'Level: {level}') lines.append(f'Status: {status}') lines.append(f'User type: {user_type}') lines[-1] += '```' return lines
def __get_duration(research_info: entity.EntityInfo, researches_data: entity.EntitiesData, **kwargs) -> str: seconds = int(research_info['ResearchTime']) result = util.get_formatted_timedelta(timedelta(seconds=seconds), include_relative_indicator=False) return result