from telebot import formatting import typing from app_types import * # Status def format_fortnite_status(fortnite_status): statuses = [__format_fortnite_service_status(service_status) for service_status in fortnite_status.service_statuses] return formatting.format_text( formatting.mbold("Fortnite status"), "", '\n'.join(statuses), separator='\n') def __format_status(status): if (status == True): return u'\u2705' else: return u'\u274c' def __format_fortnite_service_status(fortnite_service_status): return formatting.format_text( formatting.mbold(fortnite_service_status.service_name), __format_status(fortnite_service_status.status), separator=': ') # User def format_users(users: typing.List[User]): users_formatted = [format_user(user) for user in users] return formatting.format_text( '\n\n'.join(users_formatted), separator='\n') def format_user(user: User): return formatting.format_text( formatting.mbold("User: ") + user.display_name, formatting.mbold("ID: ") + user.id, separator='\n') # Stats def format_user_stats_list(stats: typing.List[UserStats]): stats_formatted = [__format_stats(single_stats) for single_stats in stats] return formatting.format_text( formatting.mbold('Current Fortnite statistics\n'), '\n\n'.join(stats_formatted), separator='\n') def format_user_stats_difference(old_user_stats: typing.List[UserStats], new_user_stats: typing.List[UserStats], timeframe_alias: str): stats_formatted = [] for stats in old_user_stats: matched = [x for x in new_user_stats if x.user_id == stats.user_id][0] stats_formatted.append(__format_stats_difference(stats, matched)) return formatting.format_text( formatting.mbold('Fortnite statistics for last {alias}\n'.format(alias = timeframe_alias)), '\n\n'.join(stats_formatted), separator='\n') def __format_stats_difference(old_user_stats: UserStats, new_user_stats: UserStats): return formatting.format_text( formatting.mbold("User: ") + new_user_stats.user_display_name, formatting.mbold("Level: ") + "{}{}".format(str(new_user_stats.level), __format_stat_difference(old_user_stats.level, new_user_stats.level)), formatting.mbold("Matches played: ") + "{}{}".format(str(new_user_stats.matches_played), __format_stat_difference(old_user_stats.matches_played, new_user_stats.matches_played)), formatting.mbold("Total kills: ") + "{}{}".format(str(new_user_stats.kills), __format_stat_difference(old_user_stats.kills, new_user_stats.kills)), formatting.mbold("Wins: ") + "{}{}".format(str(new_user_stats.wins), __format_stat_difference(old_user_stats.wins, new_user_stats.wins)), formatting.mbold("Time played: ") + "{}{}".format(__format_minutes(new_user_stats.minutesplayed), __format_minutes_difference(old_user_stats.minutesplayed, new_user_stats.minutesplayed)), formatting.mbold("Kill-Death Ratio: ") + "{}{}".format(formatting.escape_markdown(str(new_user_stats.get_kd())), __format_float_difference(old_user_stats.get_kd(), new_user_stats.get_kd())), formatting.mbold("Win percentage: ") + "{}{}".format(formatting.escape_markdown(str(new_user_stats.get_winpercentage())), __format_float_difference(old_user_stats.get_winpercentage(), new_user_stats.get_winpercentage())), separator='\n') def __format_stat_difference(old_stat_value: int, new_stat_value: int): difference = max(0, new_stat_value - old_stat_value) if difference > 0: return " \(\+ {}\)".format(str(difference)) else: return "" def __format_minutes_difference(old_minutes: int, new_minutes: int): difference = max(0, new_minutes - old_minutes) if difference > 0: return " \(\+ {}\)".format(__format_minutes(difference)) else: return "" def __format_float_difference(old_val: float, new_val: float): if old_val != new_val: difference: float = new_val - old_val sign = '' if difference > 0: sign = '+' else: sign = '-' difference = difference * -1 return formatting.escape_markdown(" \(\{} {}\)".format(sign, str(float(format(difference, '.2f'))))) else: return "" def __format_stats(user_stats: UserStats): return formatting.format_text( formatting.mbold("User: ") + user_stats.user_display_name, formatting.mbold("Level: ") + str(user_stats.level), formatting.mbold("Matches played: ") + str(user_stats.matches_played), formatting.mbold("Total kills: ") + str(user_stats.kills), formatting.mbold("Wins: ") + str(user_stats.wins), formatting.mbold("Time played: ") + __format_minutes(user_stats.minutesplayed), formatting.mbold("Kill-Death Ratio: ") + formatting.escape_markdown(str(user_stats.get_kd())), formatting.mbold("Win percantage: ") + formatting.escape_markdown(str(user_stats.get_winpercentage())), separator='\n') def __format_minutes(total_minutes: int): hours = total_minutes // 60 minutes = total_minutes % 60 hours_postfix = 's' minutes_postfix = 's' if hours % 10 == 1: hours_postfix = '' if minutes % 10 == 1: minutes_postfix = '' if hours > 0: return "{} hour{} {} minute{}".format(hours, hours_postfix, minutes, minutes_postfix) else: return "{} minute{}".format(minutes, minutes_postfix) def format_friend_online(display_name: str, party_size: int): if party_size == 1: text = 'is playing Fortnite\!' elif party_size == 2: text = 'is playing Fortnite together with {} friend\!'.format(str(party_size - 1)) elif party_size > 2: text = 'is playing Fortnite together with {} friends\!'.format(str(party_size - 1)) return formatting.format_text( u'\u2b50', formatting.mbold('{}'.format(display_name)), text, u'\u2b50', separator=' ') def format_new_friend(display_name: str): return formatting.format_text( 'Added new friend ', formatting.mbold('{}'.format(display_name)), '\!', separator='' ) def format_failed_new_friend(display_name: str): return formatting.format_text( 'Error adding new friend ', formatting.mbold('{}'.format(display_name)), ', please enable public statistics in Fortnite profile', separator='' )