Ejemplo n.º 1
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
Ejemplo n.º 2
0
def __parse_timestamp(user_info: entity.EntityDesignInfo,
                      field_name: str) -> str:
    result = None
    timestamp = user_info.get(field_name)
    if timestamp is not None:
        result = util.parse_pss_datetime(timestamp)
    return result
Ejemplo n.º 3
0
def __get_tourney_battle_attempts(user_info: entity.EntityInfo, utc_now: datetime) -> int:
    attempts = user_info.get('TournamentBonusScore')
    if attempts:
        attempts = int(attempts)
        last_login_date = util.parse_pss_datetime(user_info.get('LastLoginDate'))
        if last_login_date:
            if last_login_date.day != utc_now.day:
                attempts = 0
    return attempts
Ejemplo n.º 4
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
Ejemplo n.º 5
0
async def _get_news_details_as_embed(ctx: commands.Context, news_info: dict) -> discord.Embed:
    title = news_info['Title']
    description = util.escape_escape_sequences(news_info['Description'])
    while '\n\n' in description:
        description = description.replace('\n\n', '\n')
    sprite_url = await sprites.get_download_sprite_link(news_info['SpriteId'])
    timestamp = util.parse_pss_datetime(news_info['UpdateDate'])
    colour = util.get_bot_member_colour(ctx.bot, ctx.guild)
    link = news_info['Link'].strip()
    if link:
        fields = [('Link', link, False)]
    else:
        fields = []
    result = util.create_embed(title, description=description, image_url=sprite_url, colour=colour, footer='PSS News', timestamp=timestamp, fields=fields)
    return result
Ejemplo n.º 6
0
def _get_news_details_as_text(news_info: dict) -> list:
    news_title = news_info['Title']
    title = f'__{news_title}__'
    description = util.escape_escape_sequences(news_info['Description'])
    while '\n\n' in description:
        description = description.replace('\n\n', '\n')

    news_modify_date = util.parse_pss_datetime(news_info['UpdateDate'])
    if news_modify_date:
        modify_date = util.get_formatted_date(news_modify_date)
        title = f'{title} ({modify_date})'

    link = news_info['Link'].strip()

    result = [f'**{title}**', description]
    if link:
        result.append(f'<{link}>')

    return result
Ejemplo n.º 7
0
def _fix_field(field: str):
    if field:
        try:
            dt = util.parse_pss_datetime(field)
            if dt < __EARLIEST_EXCEL_DATETIME:
                dt = __EARLIEST_EXCEL_DATETIME
            dt.replace(tzinfo=None)
            return dt
        except (TypeError, ValueError):
            if not (len(field) >= 2 and field.startswith('0')):
                try:
                    return int(field)
                except (TypeError, ValueError):
                    try:
                        return float(field)
                    except (TypeError, ValueError):
                        pass
        field_lower = field.lower().strip()
        if field_lower == 'false':
            return False
        elif field_lower == 'true':
            return True

    return field
Ejemplo n.º 8
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
Ejemplo n.º 9
0
def __get_pss_datetime(*args, **kwargs) -> datetime:
    entity_property = kwargs.get('entity_property')
    result = util.parse_pss_datetime(entity_property)
    return result