1
+ import time
2
+
3
+ from datetime import timedelta
4
+
5
+
6
+ class Metrics (object ):
7
+
8
+ def __init__ (self , bot ):
9
+ self .bot = bot
10
+ self .start_time = None
11
+ self .dust = {'start' : None , 'latest' : None }
12
+ self .xp = {'start' : None , 'latest' : None }
13
+ self .distance = {'start' : None , 'latest' : None }
14
+ self .encounters = {'start' : None , 'latest' : None }
15
+ self .throws = {'start' : None , 'latest' : None }
16
+ self .captures = {'start' : None , 'latest' : None }
17
+ self .visits = {'start' : None , 'latest' : None }
18
+ self .unique_mons = {'start' : None , 'latest' : None }
19
+ self .evolutions = {'start' : None , 'latest' : None }
20
+
21
+ self .releases = 0
22
+ self .highest_cp = {'cp' : 0 , 'desc' : '' }
23
+ self .most_perfect = {'potential' : 0 , 'desc' : '' }
24
+
25
+ def runtime (self ):
26
+ return str (timedelta (seconds = round (time .time () - self .start_time )))
27
+
28
+ def xp_earned (self ):
29
+ return self .xp ['latest' ] - self .xp ['start' ]
30
+
31
+ def xp_per_hour (self ):
32
+ return self .xp_earned / (time .time () - self .start_time / 60 / 60 )
33
+
34
+ def distance_travelled (self ):
35
+ return self .distance ['latest' ] - self .distance ['start' ]
36
+
37
+ def num_encounters (self ):
38
+ return self .encounters ['latest' ] - self .encounters ['start' ]
39
+
40
+ def num_throws (self ):
41
+ return self .throws ['latest' ] - self .throws ['start' ]
42
+
43
+ def num_captures (self ):
44
+ return self .captures ['latest' ] - self .captures ['start' ]
45
+
46
+ def num_visits (self ):
47
+ return self .visits ['latest' ] - self .visits ['start' ]
48
+
49
+ def num_new_mons (self ):
50
+ return self .unique_mons ['latest' ] - self .unique_mons ['start' ]
51
+
52
+ def num_evolutions (self ):
53
+ return self .evolutions ['latest' ] - self .evolutions ['start' ]
54
+
55
+ def earned_dust (self ):
56
+ return self .dust ['latest' ] - self .dust ['start' ]
57
+
58
+ def captured_pokemon (self , name , cp , iv_display , potential ):
59
+ if cp > self .highest_cp ['cp' ]:
60
+ self .highest_cp = \
61
+ {'cp' : cp , 'desc' : '{} [CP: {}] [IV: {}] Potential: {} '
62
+ .format (name , cp , iv_display , potential )}
63
+
64
+ if potential > self .most_perfect ['potential' ]:
65
+ self .most_perfect = \
66
+ {'potential' : cp , 'desc' : '{} [CP: {}] [IV: {}] Potential: {} '
67
+ .format (name , cp , iv_display , potential )}
68
+ return
69
+
70
+ def released_pokemon (self , count = 1 ):
71
+ self .releases += count
72
+
73
+ def capture_stats (self ):
74
+ if self .start_time is None : self .start_time = time .time ()
75
+ self .bot .api .get_inventory ()
76
+ self .bot .api .get_player ()
77
+ response_dict = self .bot .api .call ()
78
+ try :
79
+ self .dust ['latest' ] = response_dict ['responses' ]['GET_PLAYER' ]['player_data' ]['currencies' ][1 ]['amount' ]
80
+ if self .dust ['start' ] is None : self .dust ['start' ] = self .dust ['latest' ]
81
+ for item in response_dict ['responses' ]['GET_INVENTORY' ]['inventory_delta' ]['inventory_items' ]:
82
+ if 'inventory_item_data' in item :
83
+ if 'player_stats' in item ['inventory_item_data' ]:
84
+ playerdata = item ['inventory_item_data' ]['player_stats' ]
85
+
86
+ self .xp ['latest' ] = playerdata .get ('experience' , 0 )
87
+ if self .xp ['start' ] is None : self .xp ['start' ] = self .xp ['latest' ]
88
+
89
+ self .visits ['latest' ] = playerdata .get ('poke_stop_visits' , 0 )
90
+ if self .visits ['start' ] is None : self .visits ['start' ] = self .visits ['latest' ]
91
+
92
+ self .captures ['latest' ] = playerdata .get ('pokemons_captured' , 0 )
93
+ if self .captures ['start' ] is None : self .captures ['start' ] = self .captures ['latest' ]
94
+
95
+ self .distance ['latest' ] = playerdata .get ('km_walked' , 0 )
96
+ if self .distance ['start' ] is None : self .distance ['start' ] = self .distance ['latest' ]
97
+
98
+ self .encounters ['latest' ] = playerdata .get ('pokemons_encountered' , 0 )
99
+ if self .encounters ['start' ] is None : self .encounters ['start' ] = self .encounters ['latest' ]
100
+
101
+ self .throws ['latest' ] = playerdata .get ('pokeballs_thrown' , 0 )
102
+ if self .throws ['start' ] is None : self .throws ['start' ] = self .throws ['latest' ]
103
+
104
+ self .unique_mons ['latest' ] = playerdata .get ('unique_pokedex_entries' , 0 )
105
+ if self .unique_mons ['start' ] is None : self .unique_mons ['start' ] = self .unique_mons ['latest' ]
106
+
107
+ self .visits ['latest' ] = playerdata .get ('poke_stop_visits' , 0 )
108
+ if self .visits ['start' ] is None : self .visits ['start' ] = self .visits ['latest' ]
109
+
110
+ self .evolutions ['latest' ] = playerdata .get ('evolutions' , 0 )
111
+ if self .evolutions ['start' ] is None : self .evolutions ['start' ] = self .evolutions ['latest' ]
112
+ except KeyError :
113
+ # Nothing we can do if there's no player info.
114
+ return
0 commit comments