22
33# Imports
44import asyncio
5+ from datetime import datetime
56import enum
67import json
78import requests
@@ -84,19 +85,32 @@ def login(self, ssoToken: str):
8485 f'tfa_enrollment_seen=true;' \
8586 f'gtm.custom.bot.flag=human;'
8687
87- r = requests .get (f"{ self .__common .baseUrl } { self .__common .apiPath } /crm/cod/v2/identities/{ ssoToken } " , headers = self .__common .baseHeaders )
88+ r = requests .get (f"{ self .__common .baseUrl } { self .__common .apiPath } /crm/cod/v2/identities/{ ssoToken } " ,
89+ headers = self .__common .baseHeaders )
8890
8991 if r .json ()['status' ] == 'success' :
9092 self .__common .loggedIn = True
91- for sub in [self .Warzone , self .ModernWarfare , self .ColdWar , self .Vanguard , self .Shop , self .Me , self .Misc ]:
93+ for sub in [self .Warzone , self .ModernWarfare , self .ColdWar ,
94+ self .Vanguard , self .Shop , self .Me , self .Misc ]:
9295 sub .loggedIn = self .__common .loggedIn
9396 sub .baseSsoToken = self .__common .baseSsoToken
9497 sub .baseHeaders = self .__common .baseHeaders
9598 sub .basePostHeaders = self .__common .basePostHeaders
99+
100+ # deleting scope data
101+ del ssoToken , sub , r
96102 else :
103+ # delete scope data
104+ del ssoToken , r
105+
106+ # system exit
97107 sys .exit (InvalidToken (ssoToken ))
98108 except Exception as e :
99109 print (e )
110+
111+ # delete scope data
112+ del ssoToken
113+
100114 return e
101115
102116
@@ -117,7 +131,10 @@ def __init__(self):
117131
118132 # headers & cookies
119133 self .fakeXSRF = str (uuid .uuid4 ())
120- self .userAgent : str = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
134+ self .userAgent : str = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " \
135+ "AppleWebKit/537.36 (KHTML, like Gecko) " \
136+ "Chrome/74.0.3729.169 " \
137+ "Safari/537.36"
121138 self .baseCookie : str = "new_SiteId=cod;ACT_SSO_LOCALE=en_US;country=US;"
122139 self .baseSsoToken : str = ''
123140 self .baseUrl : str = "https://my.callofduty.com"
@@ -163,8 +180,15 @@ async def __Request(self, method, url):
163180
164181 try :
165182 r = requests .request (method = method , url = url , headers = h , data = b )
183+ # delete scope data
184+ del method , url , h , b
185+
186+ # return data
166187 return r
167188 except Exception as e :
189+ # delete scope data
190+ del method , url , h , b
191+
168192 return e
169193
170194 async def __sendRequest (self , url : str ):
@@ -175,13 +199,23 @@ async def __sendRequest(self, url: str):
175199 data = respond .json ()
176200 if data ['status' ] == 'success' :
177201 data = self .__mapping (data ['data' ])
202+ # delete scope data
203+ del url , respond
204+
205+ # return data
178206 return data
179207 else :
208+ # delete scope data
209+ del url , respond
210+
180211 sys .exit (StatusError ())
181212 else :
213+ # delete scope data
214+ del url
215+
182216 return respond .status_code
183217 else :
184- raise NotLoggedIn
218+ sys . exit ( NotLoggedIn ())
185219
186220 async def __sendPostRequest (self , url : str , body : dict ):
187221 if self .loggedIn :
@@ -196,8 +230,8 @@ async def __sendPostRequest(self, url: str, body: dict):
196230 raise NotLoggedIn ()
197231
198232 # client name url formatter
199- def __cleanClientName (self , ganertage ):
200- return quote (ganertage .encode ("utf-8" ))
233+ def __cleanClientName (self , gamertag ):
234+ return quote (gamertag .encode ("utf-8" ))
201235
202236 # helper
203237 def __helper (self , platform , gamertag ):
@@ -213,24 +247,89 @@ def __helper(self, platform, gamertag):
213247 # mapping
214248 def __mapping (self , data ):
215249 r = requests .get ('https://engineer152.github.io/wz-data/weapon-ids.json' )
216- guns = r .json ()[ 'All Weapons' ]
250+ guns = r .json ()
217251 r = requests .get ('https://engineer152.github.io/wz-data/game-modes.json' )
218- modes = r .json ()['modes' ]
252+ modes = r .json ()
253+ r = requests .get ('https://engineer152.github.io/wz-data/perks.json' )
254+ perks = r .json ()
219255
220256 # guns
221257 try :
222- for m in data ['matches' ]:
223- for l in m ['player' ]['loadouts' ]:
224- if l ['primaryWeapon' ]['label' ] is None :
225- l ['primaryWeapon' ]['label' ] = guns [l ['primaryWeapon' ]['name' ]]
226-
227- if l ['secondaryWeapon' ]['label' ] is None :
228- l ['secondaryWeapon' ]['label' ] = guns [l ['secondaryWeapon' ]['name' ]]
258+ for match in data ['matches' ]:
259+ # time stamps
260+ try :
261+ match ['utcStartDateTime' ] = datetime .fromtimestamp (match ['utcStartSeconds' ]).strftime ("%A, %B %d, %Y, %I:%M:%S" )
262+ match ['utcEndDateTime' ] = datetime .fromtimestamp (match ['utcEndSeconds' ]).strftime ("%A, %B %d, %Y, %I:%M:%S" )
263+ except KeyError :
264+ pass
265+
266+ # loadouts list
267+ for loadout in match ['player' ]['loadouts' ]:
268+ # weapons
269+ if loadout ['primaryWeapon' ]['label' ] is None :
270+ try :
271+ loadout ['primaryWeapon' ]['label' ] = guns [loadout ['primaryWeapon' ]['name' ]]
272+ except KeyError :
273+ pass
274+ if loadout ['secondaryWeapon' ]['label' ] is None :
275+ try :
276+ loadout ['secondaryWeapon' ]['label' ] = guns [loadout ['secondaryWeapon' ]['name' ]]
277+ except KeyError :
278+ pass
279+
280+ # perks list
281+ for perk in loadout ['perks' ]:
282+ if perk ['label' ] is None :
283+ try :
284+ perk ['label' ] = perks [perk ['name' ]]
285+ except KeyError :
286+ pass
287+
288+ # extra perks list
289+ for perk in loadout ['extraPerks' ]:
290+ if perk ['label' ] is None :
291+ try :
292+ perk ['label' ] = perks [perk ['name' ]]
293+ except KeyError :
294+ pass
295+
296+ # loadout list
297+ for loadout in match ['player' ]['loadout' ]:
298+ if loadout ['primaryWeapon' ]['label' ] is None :
299+ try :
300+ loadout ['primaryWeapon' ]['label' ] = guns [loadout ['primaryWeapon' ]['name' ]]
301+ except KeyError :
302+ pass
303+ if loadout ['secondaryWeapon' ]['label' ] is None :
304+ try :
305+ loadout ['secondaryWeapon' ]['label' ] = guns [loadout ['secondaryWeapon' ]['name' ]]
306+ except KeyError :
307+ pass
308+
309+ # perks list
310+ for perk in loadout ['perks' ]:
311+ if perk ['label' ] is None :
312+ try :
313+ perk ['label' ] = perks [perk ['name' ]]
314+ except KeyError :
315+ pass
316+
317+ # extra perks list
318+ for perk in loadout ['extraPerks' ]:
319+ if perk ['label' ] is None :
320+ try :
321+ perk ['label' ] = perks [perk ['name' ]]
322+ except KeyError :
323+ pass
229324 except KeyError :
230325 pass
231326 except Exception as e :
232327 print (e )
233328
329+ # delete scope data
330+ del guns , modes , perks , match , loadout , perk
331+
332+ # return mapped or unmapped data
234333 return data
235334
236335 # API Requests
0 commit comments