Пример #1
0
async def get_fleet_users_stars_from_info(ctx: commands.Context, fleet_info: dict, fleet_users_infos: dict, retrieved_date: datetime = None, as_embed: bool = settings.USE_EMBEDS) -> list:
    fleet_name = fleet_info[FLEET_DESCRIPTION_PROPERTY_NAME]
    division = lookups.DIVISION_DESIGN_ID_TO_CHAR[fleet_info[top.DIVISION_DESIGN_KEY_NAME]]

    fleet_users_infos = util.sort_entities_by(list(fleet_users_infos.values()), [('AllianceScore', int, True), (user.USER_KEY_NAME, int, False)])
    fleet_users_infos_count = len(fleet_users_infos)

    title = f'{fleet_name} member stars (division {division})'
    lines = []
    for i, user_info in enumerate(fleet_users_infos, 1):
        stars = user_info['AllianceScore']
        user_name = util.escape_markdown(user_info[user.USER_DESCRIPTION_PROPERTY_NAME])
        fleet_membership = user_info.get('AllianceMembership')
        if i < fleet_users_infos_count:
            difference = int(user_info['AllianceScore']) - int(fleet_users_infos[i]['AllianceScore'])
        else:
            difference = 0
        user_rank = lookups.get_lookup_value_or_default(lookups.ALLIANCE_MEMBERSHIP, fleet_membership, default=fleet_membership)
        lines.append(f'**{i}.** {stars} (+{difference}) {emojis.star} {user_name} ({user_rank})')

    footer_text = util.get_historic_data_note(retrieved_date)

    if as_embed:
        colour = util.get_bot_member_colour(ctx.bot, ctx.guild)
        icon_url = await sprites.get_download_sprite_link(fleet_info.get('AllianceSpriteId'))
        result = util.create_basic_embeds(title, description=lines, colour=colour, icon_url=icon_url, footer=footer_text)
        return result
    else:
        if retrieved_date is not None:
            lines.append(f'```{footer_text}```')
        return lines
Пример #2
0
def get_fleet_users_stars_from_info(fleet_info: dict,
                                    fleet_users_infos: dict,
                                    retrieved_date: datetime = None) -> list:
    fleet_name = fleet_info[FLEET_DESCRIPTION_PROPERTY_NAME]
    division = lookups.DIVISION_DESIGN_ID_TO_CHAR[
        fleet_info['DivisionDesignId']]

    fleet_users_infos = util.sort_entities_by(list(
        fleet_users_infos.values()), [('AllianceScore', int, True),
                                      (user.USER_KEY_NAME, int, False)])
    fleet_users_infos_count = len(fleet_users_infos)

    lines = [f'**{fleet_name} member stars (division {division})**']
    for i, user_info in enumerate(fleet_users_infos, 1):
        stars = user_info['AllianceScore']
        user_name = util.escape_markdown(
            user_info[user.USER_DESCRIPTION_PROPERTY_NAME])
        if i < fleet_users_infos_count:
            difference = int(user_info['AllianceScore']) - int(
                fleet_users_infos[i]['AllianceScore'])
        else:
            difference = 0
        lines.append(
            f'**{i}.** {stars} (+{difference}) {emojis.star} {user_name}')

    if retrieved_date is not None:
        lines.append(util.get_historic_data_note(retrieved_date))

    return lines
Пример #3
0
async def get_division_stars(division: str = None,
                             fleet_data: dict = None,
                             retrieved_date: datetime = None,
                             as_embed: bool = settings.USE_EMBEDS):
    if division:
        pss_assert.valid_parameter_value(
            division,
            'division',
            min_length=1,
            allowed_values=ALLOWED_DIVISION_LETTERS)
        if division == '-':
            division = None
    else:
        division = None

    if fleet_data is None or retrieved_date is None:
        data = await core.get_data_from_path(STARS_BASE_PATH)
        fleet_infos = core.xmltree_to_dict3(data)
    else:
        fleet_infos = fleet_data

    divisions = {}
    if division:
        division_design_id = lookups.DIVISION_CHAR_TO_DESIGN_ID[
            division.upper()]
        divisions[division.upper()] = [
            fleet_info for fleet_info in fleet_infos.values()
            if fleet_info['DivisionDesignId'] == division_design_id
        ]
        pass
    else:
        for division_design_id in lookups.DIVISION_DESIGN_ID_TO_CHAR.keys():
            if division_design_id != '0':
                division_letter = lookups.DIVISION_DESIGN_ID_TO_CHAR[
                    division_design_id]
                divisions[division_letter] = [
                    fleet_info for fleet_info in fleet_infos.values()
                    if fleet_info['DivisionDesignId'] == division_design_id
                ]

    if divisions:
        result = []
        for division_letter, fleet_infos in divisions.items():
            result.extend(
                _get_division_stars_as_text(division_letter, fleet_infos))
            result.append(settings.EMPTY_LINE)
        if result:
            result = result[:-1]
            if retrieved_date is not None:
                result.append(util.get_historic_data_note(retrieved_date))
        return result, True
    else:
        return [], False
Пример #4
0
def get_fleet_users_stars_from_info(fleet_info: dict,
                                    fleet_users_infos: dict,
                                    retrieved_date: datetime = None) -> list:
    fleet_name = fleet_info[FLEET_DESCRIPTION_PROPERTY_NAME]
    division = lookups.DIVISION_DESIGN_ID_TO_CHAR[
        fleet_info['DivisionDesignId']]

    fleet_users_infos = util.sort_entities_by(list(
        fleet_users_infos.values()), [('AllianceScore', int, True),
                                      (user.USER_KEY_NAME, int, False)])

    lines = [f'**{fleet_name} member stars (division {division})**']
    for i, user_info in enumerate(fleet_users_infos, 1):
        stars = user_info['AllianceScore']
        user_name = user_info[user.USER_DESCRIPTION_PROPERTY_NAME]
        if util.should_escape_entity_name(user_name):
            user_name = f'`{user_name}`'
        lines.append(f'**{i}.** {stars} {emojis.star} {user_name}')

    if retrieved_date is not None:
        lines.append(util.get_historic_data_note(retrieved_date))

    return lines
Пример #5
0
async def get_division_stars(ctx: commands.Context,
                             division: str = None,
                             fleet_data: dict = None,
                             retrieved_date: datetime = None,
                             as_embed: bool = settings.USE_EMBEDS):
    if division:
        pss_assert.valid_parameter_value(
            division,
            'division',
            min_length=1,
            allowed_values=ALLOWED_DIVISION_LETTERS)
        if division == '-':
            division = None
    else:
        division = None

    if fleet_data is None or retrieved_date is None:
        data = await core.get_data_from_path(STARS_BASE_PATH)
        fleet_infos = core.xmltree_to_dict3(data)
    else:
        fleet_infos = fleet_data

    divisions_designs_infos = await divisions_designs_retriever.get_data_dict3(
    )

    divisions = {}
    if division:
        division_design_id = lookups.DIVISION_CHAR_TO_DESIGN_ID[
            division.upper()]
        divisions[division_design_id] = [
            fleet_info for fleet_info in fleet_infos.values()
            if fleet_info[DIVISION_DESIGN_KEY_NAME] == division_design_id
        ]
        pass
    else:
        for division_design_id in lookups.DIVISION_DESIGN_ID_TO_CHAR.keys():
            if division_design_id != '0':
                divisions[division_design_id] = [
                    fleet_info for fleet_info in fleet_infos.values() if
                    fleet_info[DIVISION_DESIGN_KEY_NAME] == division_design_id
                ]

    if divisions:
        divisions_texts = []
        for division_design_id, fleet_infos in divisions.items():
            divisions_texts.append(
                (division_design_id, _get_division_stars_as_text(fleet_infos)))

        result = []
        footer = util.get_historic_data_note(retrieved_date)
        colour = util.get_bot_member_colour(ctx.bot, ctx.guild)
        for division_design_id, division_text in divisions_texts:
            if as_embed:
                division_title = _get_division_title(division_design_id,
                                                     divisions_designs_infos,
                                                     False)
                thumbnail_url = await sprites.get_download_sprite_link(
                    divisions_designs_infos[division_design_id]
                    ['BackgroundSpriteId'])
                embed_bodies = util.create_posts_from_lines(
                    division_text,
                    settings.MAXIMUM_CHARACTERS_EMBED_DESCRIPTION)
                for i, embed_body in enumerate(embed_bodies):
                    thumbnail_url = thumbnail_url if i == 0 else None
                    embed = util.create_embed(division_title,
                                              description=embed_body,
                                              footer=footer,
                                              thumbnail_url=thumbnail_url,
                                              colour=colour)
                    result.append(embed)
            else:
                division_title = _get_division_title(division_design_id,
                                                     divisions_designs_infos,
                                                     True)
                result.append(division_title)
                result.extend(division_text)
                result.append(settings.EMPTY_LINE)

        if not as_embed:
            result = result[:-1]
            if footer:
                result.append(f'```{footer}```')

        return result, True
    else:
        return [
            f'An unknown error occured while retrieving division info. Please contact the bot\'s author!'
        ], False