async def get_user_details_by_name(user_name: str, as_embed: bool = settings.USE_EMBEDS ) -> list: pss_assert.valid_parameter_value(user_name, 'user_name', min_length=0) user_infos = list((await _get_user_infos(user_name)).values()) return user_infos
async def get_best_items(slot: str, stat: str, as_embed: bool = settings.USE_EMBEDS): pss_assert.valid_parameter_value( slot, 'slot', allowed_values=lookups.EQUIPMENT_SLOTS_LOOKUP.keys()) pss_assert.valid_parameter_value( stat, 'stat', allowed_values=lookups.STAT_TYPES_LOOKUP.keys()) items_designs_details = await items_designs_retriever.get_data_dict3() error = _get_best_items_error(slot, stat) if error: return error, False any_slot = slot == 'all' or slot == 'any' slot_filter = _get_slot_filter(slot, any_slot) stat_filter = _get_stat_filter(stat) best_items = _get_best_items_designs(slot_filter, stat_filter, items_designs_details) if not best_items: return [ f'Could not find an item for slot **{slot}** providing bonus **{stat}**.' ], False else: if as_embed: return _get_best_items_as_embed(stat_filter, best_items), True else: return _get_best_items_as_text_all(stat_filter, best_items), True
async def get_fleet_infos_by_name(fleet_name: str, as_embed: bool = settings.USE_EMBEDS ) -> list: pss_assert.valid_parameter_value(fleet_name, 'fleet_name', min_length=0) fleet_infos = list((await _get_fleet_infos_by_name(fleet_name)).values()) return fleet_infos
def get_best_items(slot: str, stat: str, as_embed: bool = False): pss_assert.valid_parameter_value( slot, 'slot', allowed_values=lookups.EQUIPMENT_SLOTS_LOOKUP.keys()) pss_assert.valid_parameter_value( stat, 'stat', allowed_values=lookups.STAT_TYPES_LOOKUP.keys()) error = _get_best_items_error(slot, stat) if error: return error, False slot = slot.lower() stat = stat.lower() any_slot = slot == 'all' or slot == 'any' item_design_data = __item_designs_cache.get_data_dict3() if any_slot: slot_filter = list(lookups.EQUIPMENT_SLOTS_LOOKUP.values()) else: slot_filter = lookups.EQUIPMENT_SLOTS_LOOKUP[slot] stat_filter = lookups.STAT_TYPES_LOOKUP[stat] filters = { 'ItemType': 'Equipment', 'ItemSubType': slot_filter, 'EnhancementType': stat_filter } filtered_data = core.filter_data_dict(item_design_data, filters, ignore_case=True) if not filtered_data: return [ f'Could not find an item for slot **{slot}** providing bonus **{stat}**.' ], False else: if any_slot: key_function = _get_key_for_best_items_sort_all slot_display = None else: key_function = _get_key_for_best_items_sort slot_display = slot_filter.replace('Equipment', '') match_design_data = sorted(filtered_data.values(), key=key_function) stat_display = stat_filter if as_embed: return _get_best_items_as_embed(slot_display, stat_display, any_slot, match_design_data), True else: if any_slot: return _get_best_items_as_text_all(stat_display, match_design_data), True else: return _get_best_items_as_text(slot_display, stat_display, match_design_data), True
async def set_prefix(self, prefix: str) -> bool: pss_assert.valid_parameter_value(prefix, _COLUMN_NAME_PREFIX, min_length=1) if not self.__prefix or prefix != self.__prefix: settings = { _COLUMN_NAME_PREFIX: prefix } success = await db_update_server_settings(self.__guild_id, settings) if success: self.__prefix = prefix return success return True
async def get_best_items( ctx: Context, slot: str, stat: str, as_embed: bool = settings.USE_EMBEDS) -> Union[List[Embed], List[str]]: pss_assert.valid_parameter_value( slot, 'slot', allowed_values=lookups.EQUIPMENT_SLOTS_LOOKUP.keys(), allow_none_or_empty=True) pss_assert.valid_parameter_value( stat, 'stat', allowed_values=lookups.STAT_TYPES_LOOKUP.keys()) items_details = await items_designs_retriever.get_data_dict3() error = __get_best_items_error(slot, stat) if error: raise Error(error) any_slot = not slot or slot in ANY_SLOT_MARKERS slot_filter = __get_slot_filter(slot, any_slot) stat_filter = __get_stat_filter(stat) best_items = __get_best_items_designs(slot_filter, stat_filter, items_details) if not best_items: if not any_slot: slot = f' for slot `{slot}`' raise NotFound( f'Could not find an item{slot} providing bonus `{stat_filter.lower()}`.' ) else: groups = await __get_collection_groups(best_items, stat_filter, as_embed) result = [] if as_embed: for title, best_items_collection in groups.items(): footer = __get_footer_text_for_group(title, as_embed) embeds = await best_items_collection.get_entities_details_as_embed( ctx, custom_title=title, custom_footer_text=footer) result.extend(embeds) return result else: module_title = None for title, best_items_collection in groups.items(): if 'module' in title.lower(): module_title = title texts = await best_items_collection.get_entities_details_as_text( custom_title=title) result.extend(texts) result.append(utils.discord.ZERO_WIDTH_SPACE) footer = __get_footer_text_for_group(module_title, as_embed) result.append(footer) return result
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
async def set_pagination(guild: discord.Guild, switch: str) -> bool: await db_create_server_settings(guild.id) if switch is None: return await toggle_use_pagination(guild.id) else: pss_assert.valid_parameter_value(switch, 'switch', min_length=1, allowed_values=_VALID_PAGINATION_SWITCH_VALUES.keys(), case_sensitive=False) use_pagination = convert_from_on_off(switch) success = await db_update_use_pagination(guild.id, use_pagination) if success: return use_pagination else: return not use_pagination
async def set_use_pagination(self, use_pagination: bool) -> bool: if use_pagination is None: if self.__use_pagination is None: use_pagination = app_settings.DEFAULT_USE_EMOJI_PAGINATOR else: use_pagination = self.__use_pagination use_pagination = not use_pagination else: pss_assert.valid_parameter_value(use_pagination, 'use_pagination', min_length=1, allowed_values=_VALID_BOOL_SWITCH_VALUES.keys(), case_sensitive=False) use_pagination = _convert_from_on_off(use_pagination) if self.__use_pagination is None or use_pagination != self.__use_pagination: settings = { _COLUMN_NAME_USE_PAGINATION: use_pagination } success = await db_update_server_settings(self.id, settings) if success: self.__use_pagination = use_pagination return success return True
async def set_use_embeds(self, use_embeds: bool) -> bool: if use_embeds is None: if self.__use_embeds is None: use_embeds = app_settings.USE_EMBEDS else: use_embeds = self.__use_embeds use_embeds = not use_embeds else: pss_assert.valid_parameter_value(use_embeds, 'use_embeds', min_length=1, allowed_values=_VALID_BOOL_SWITCH_VALUES.keys(), case_sensitive=False) use_embeds = _convert_from_on_off(use_embeds) if self.__use_embeds is None or use_embeds != self.__use_embeds: settings = { _COLUMN_NAME_USE_EMBEDS: use_embeds } success = await db_update_server_settings(self.id, settings) if success: self.__use_embeds = use_embeds return success return True
async def get_division_stars( ctx: Context, division: str = None, fleet_data: dict = None, retrieved_date: datetime = None, as_embed: bool = settings.USE_EMBEDS) -> Union[List[Embed], List[str]]: 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 = utils.convert.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 ] 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 = utils.datetime.get_historic_data_note(retrieved_date) colour = utils.discord.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, retrieved_date) thumbnail_url = await sprites.get_download_sprite_link( divisions_designs_infos[division_design_id] ['BackgroundSpriteId']) embed_bodies = utils.discord.create_posts_from_lines( division_text, utils.discord.MAXIMUM_CHARACTERS_EMBED_DESCRIPTION) for i, embed_body in enumerate(embed_bodies): thumbnail_url = thumbnail_url if i == 0 else None embed = utils.discord.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, retrieved_date) result.append(division_title) result.extend(division_text) result.append(utils.discord.ZERO_WIDTH_SPACE) if not as_embed: result = result[:-1] if footer: result.append(f'```{footer}```') return result else: raise Error( f'An unknown error occured while retrieving division info. Please contact the bot\'s author!' )
async def get_fleet_infos_by_name(fleet_name: str) -> List[EntityInfo]: pss_assert.valid_parameter_value(fleet_name, 'fleet_name', min_length=0) fleet_infos = list((await __get_fleets_data_by_name(fleet_name)).values()) return fleet_infos
async def get_users_infos_by_name(user_name: str) -> List[EntityInfo]: pss_assert.valid_parameter_value(user_name, 'user_name', min_length=0) user_infos = list((await __get_users_data(user_name)).values()) return user_infos