summaryrefslogtreecommitdiff
path: root/formatter/__init__.py
blob: a6e190586fafc1d2f2c65e2f25d3efc800dc66b4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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)),
        separator='\n')

def __format_stat_difference(old_stat_value: int, new_stat_value: int):
    if old_stat_value != new_stat_value:
        difference = max(0, new_stat_value - old_stat_value)
        return " \(\+ {}\)".format(str(difference))
    else:
        return ""

def __format_minutes_difference(old_minutes: int, new_minutes: int):
    if old_minutes != new_minutes:
        difference = max(0, new_minutes - old_minutes)
        return " \(\+ {}\)".format(__format_minutes(difference))
    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),
        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 = ''
    return "{} hour{} {} minute{}".format(hours, hours_postfix, 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=''
    )