-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathplayer.py
More file actions
112 lines (95 loc) · 3.7 KB
/
player.py
File metadata and controls
112 lines (95 loc) · 3.7 KB
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
import asyncio
from asyncapis import AsyncAPI
import time
import event
from config import config
from stats import Stats
uuid_cache = {}
class Player:
def __init__(self, ign=None, uuid=None):
self.data = {}
self.ign = ign
self.uuid = uuid
self.nicked = False
self.updating = False
self.pending_render = True
self.error_message = None
self.active = True
async def update(self, timeout=5):
if self.updating: return
self.updating = True
#print("updating", self.ign)
try:
hypixel_api_key = config.get("hypixel_api_key")
if not hypixel_api_key:
self.error_message = f"$bplease do $e/api new"
self.render_request()
return
cached_uuid = uuid_cache.get(self.ign.lower())
if cached_uuid:
status_code, data = await AsyncAPI.get_hypixel(api_key=hypixel_api_key, uuid=cached_uuid, timeout=timeout)
else:
status_code, data = await AsyncAPI.get_hypixel(api_key=hypixel_api_key, ign=self.ign, timeout=timeout)
if status_code == 408:
#print("timeout")
if self.active:
self.error_message = f"$bRetrying....."
self.render_request()
self.updating = False
await self.update(timeout=15)
return
if data.get("cause",None) == "You have already looked up this name recently":
self.error_message = f"Username lookup failed."
self.render_request()
uuid = await AsyncAPI.get_uuid(self.ign)
if uuid:
self.uuid = uuid
else:
self.nicked = True
return
self.error_message = f"Retrying..."
self.render_request()
status_code, data = await AsyncAPI.get_hypixel(api_key=hypixel_api_key, uuid=uuid)
if data.get("throttle",None):
if self.active:
for i in range(3):
self.error_message = f"$bRetrying in {3-i} sec"
self.render_request()
await asyncio.sleep(1)
self.error_message = f"$bRetrying....."
self.render_request()
self.updating = False
await self.update()
return
if data.get("cause",None) == "Invalid API key":
self.error_message = f"$cInvalid API key."
self.render_request()
await asyncio.sleep(2)
self.error_message = f"$bplease do $e/api new"
self.render_request()
return
if data.get("player",0) is None:
self.nicked = True
return
player = data.get("player")
hypixel = Stats(player)
self.data["hypixel"] = hypixel
self.uuid = hypixel.uuid
uuid_cache[self.ign.lower()] = self.uuid
self.ign = hypixel.displayname
self.render_request()
self.data["skin"] = await AsyncAPI.get_session_skin(self.uuid, int(24))
except Exception as e:
print(e)
finally:
self.render_request()
self.updating = False
def render_notification(self):
self.pending_render = False
def render_request(self):
self.pending_render = True
event.post("render_request",None)
@staticmethod
def set_apikey(key):
config.set("hypixel_api_key", key)
config.dump()