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
Esempio n. 2
0
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
Esempio n. 3
0
    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)
Esempio n. 4
0
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
Esempio n. 5
0
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
Esempio n. 7
0
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
Esempio n. 8
0
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
Esempio n. 9
0
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
Esempio n. 10
0
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