Source code for asyncpixel.utils

"""Utils."""
import re
from typing import Optional, Union

from asyncpixel.constants import GameType, get_game_types

ranks = {
    "NONE": None,
    "VIP": "VIP",
    "VIP_PLUS": "VIP+",
    "MVP": "MVP",
    "MVP_PLUS": "MVP+",
    "SUPERSTAR": "MVP++",
    "YOUTUBER": "YOUTUBE",
    "PIG+++": "PIG+++",
    "BUILD TEAM": "BUILD TEAM",
    "HELPER": "HELPER",
    "MODERATOR": "MOD",
    "ADMIN": "ADMIN",
    "SLOTH": "SLOTH",
    "OWNER": "OWNER",
}


[docs]def get_rank( package_rank: Optional[str] = None, rank: Optional[str] = None, prefix_raw: Optional[str] = None, monthly_package_rank: Optional[str] = None, new_package_rank: Optional[str] = None, ) -> Optional[str]: """Get rank of Hypixel player. Args: rank (Optional[str]): rank prefix_raw (Optional[str]): raw prefix monthly_package_rank (Optional[str]): monthly package for mvp++ new_package_rank (Optional[str]): new rank format package_rank (Optional[str]): old rank format Returns: Optional[str]: rank """ real_rank = None if prefix_raw and prefix_raw != "NONE": prefix = re.sub(r"§.", "", prefix_raw)[1:-1] # prefixes all start and end with brackets, and have Minecraft color codes, # this is to remove color codes and # brackets real_rank = ranks.get(prefix, prefix) elif rank and rank != "NORMAL": real_rank = ranks.get(re.sub(r"§.", "", rank)[1:-1], rank) elif (monthly_package_rank and monthly_package_rank != "NONE") and not real_rank: real_rank = ranks.get(monthly_package_rank, monthly_package_rank) elif new_package_rank and not real_rank: real_rank = ranks.get(new_package_rank, new_package_rank) elif package_rank and not real_rank: real_rank = ranks.get(package_rank, package_rank) return real_rank
[docs]def calc_player_level(xp: Union[float, int]) -> float: """Calculate player level from xp. Args: xp (int): amount of xp a player has. Returns: float: current level of player. """ return float(1 + (-8750.0 + (8750**2 + 5000 * xp) ** 0.5) / 2500)
[docs]def validate_game_type(game_type: Union[str, int]) -> GameType: """Validate and convert game type. Args: type (Union[str, int]): Game name or id. Returns: GameType: GameType object """ if type(game_type) is int: return next(game for game in get_game_types() if game.id == game_type) else: return next(game for game in get_game_types() if game.type_name == game_type)