import fortnitepy import datetime __season__ = 31 # must correlate to currently active season number class Duration(): duration_days: int description: str def __init__(self, duration_days: int, description: str): self.duration_days = duration_days self.description = description class UserStats: user_id: str user_display_name: str level: int matches_played: int kills: int wins: int minutesplayed: int def get_kd(self): try: kd = self.kills / (self.matches_played - self.wins) except ZeroDivisionError: kd = 0 return float(format(kd, '.2f')) def get_winpercentage(self): try: winper = (self.wins * 100) / self.matches_played except ZeroDivisionError: winper = 0 if winper > 100: winper = 100 return float(format(winper, '.2f')) class User: id: str display_name: str __fortnite_user: fortnitepy.user.UserBase def from_fortnite_friend(user: fortnitepy.user.UserBase): if user is None: return None instance = User() instance.id = user.id instance.display_name = user.display_name instance.__fortnite_user = user return instance async def fetch_stats(self) -> UserStats: user_stats = UserStats() user_stats.user_id = self.id user_stats.user_display_name = self.display_name try: br_stats = await self.__fortnite_user.fetch_br_stats() bp_level: float = await self.__fortnite_user.fetch_battlepass_level(season=__season__) combined_stats = br_stats.get_combined_stats() user_stats.level = int(bp_level//1) if bp_level is not None else 0 user_stats.matches_played = self.get_stats_value(combined_stats, 'matchesplayed') user_stats.kills = self.get_stats_value(combined_stats, 'kills') user_stats.wins = self.get_stats_value(combined_stats, 'wins') user_stats.minutesplayed = self.get_stats_value(combined_stats, 'minutesplayed') except: user_stats.level = 0 user_stats.matches_played = 0 user_stats.kills = 0 user_stats.wins = 0 user_stats.minutesplayed = 0 return user_stats def get_stats_value(self, combined_stats: dict, key: str): value = 0 value += self.get_stats_value_null_safe(combined_stats, 'keyboardmouse', key) value += self.get_stats_value_null_safe(combined_stats, 'gamepad', key) return value def get_stats_value_null_safe(self, combined_stats: dict, device_key: str, key: str): if device_key in combined_stats: if key in combined_stats[device_key]: return combined_stats[device_key][key] return 0