· 5 years ago · Feb 14, 2021, 10:18 PM
1import requests, math, threading, time, os, sys, keyboard, json
2from tkinter import Tk, Label, Button
3from MathEquations import *
4home = os.path.expanduser('~') # user path
5players_in_user_team = []
6row_num = 1
7teamates_fst = ["first", "second", "third"]
8column_num = 0
9nick_users = []
10game = False
11nick_num = 0
12player_to_row = {}
13user_name = input("Enter your name(If nicked Enter your nick): ").lower()
14players_in_user_team.append(user_name)
15while True:
16 global team_number
17 team_number = input("Enter the number of your teamates(0 OR 1 OR 2 OR 3): ")
18 if team_number == "0" or team_number == "1" or team_number == "2" or team_number == "3":
19 team_number = int(team_number)
20 break
21for i in range(team_number):
22 num = teamates_fst[i]
23 teamate = input(f"Enter your {num} teamate`s name or his nick: ").lower()
24 players_in_user_team.append(teamate)
25def auto_who():
26 keyboard.press("t")
27 keyboard.release("t")
28 time.sleep(.2)
29 keyboard.write("/who")
30 keyboard.press("enter")
31 keyboard.release("enter")
32def close():
33 sys.exit()
34def full_screen():
35 try:
36 os.system(".\\fullscreen\\fullscreen.exe")
37 except:
38 console.log("Please Open Mc")
39def full_thread():
40 t1 = threading.Thread(target = full_screen)
41 t1.daemon = True
42 t1.start()
43root = Tk() # gui settings
44for label_text in ["Name ","Fkdr ", "W/L ","WS ","Stars ","Fkills ","Wins "]:
45 name_label = Label(root, text=label_text, bg="black", fg="green")
46 name_label.grid(row=1, column=column_num)
47 column_num += 1
48exit_button = Button(root, text="Exit", bg="red", fg="black", command= close)
49exit_button.grid(row=0, column=0)
50full_button = Button(root, text="FullScreen", bg="gray", fg="black", command= full_thread)
51full_button.grid(row=0, column=1)
52root.title("Remix BW AutoQueue V1.0.0") # GUI title
53root.geometry("425x425-1+0") # the dimentions of the GUI
54root.attributes('-alpha', 0.7) # making the GUI trasparent
55root.attributes('-topmost', True) # making the GUI always on the top of any program
56root.overrideredirect(True) # making the gui without borders
57root.configure(bg="black") # background color of the GUI
58def clear(): # a func to clear the gui rows
59 for label in root.grid_slaves():
60 if int(label.grid_info()["row"]) > 1:
61 label.grid_forget()
62def leave_game(): # a func to leave the game
63 global game
64 global nick_num
65 global nick_users
66 global player_to_row
67 nick_num = 0
68 nick_users = []
69 if game == True:
70 game = False
71 keyboard.press("t")
72 keyboard.release("t")
73 time.sleep(.1)
74 keyboard.write("/l b")
75 keyboard.press("enter")
76 keyboard.release("enter")
77 time.sleep(.3)
78 for i in range(2):
79 keyboard.press("t")
80 keyboard.release("t")
81 time.sleep(.2)
82 keyboard.write("/p warp")
83 keyboard.press("enter")
84 keyboard.release("enter")
85 time.sleep(.2)
86 game = False
87def checking_stats(name, row_num, root): # a func to get the stats of the players
88 try:
89 url = f"https://api.hypixel.net/player?key={API_KEY}&name={name}"
90 res = requests.get(url)
91 userdata = res.json()
92 except:
93 return Label(root, text='Hypixel api server in currently down', bg="black", fg="red").grid(row=row_num)
94 if userdata["success"] == False:
95 return Label(root, text='Invalid Api_Key (use /api new)', bg="black", fg="red").grid(row=row_num)
96 global nick_num
97 global nick_users
98 if userdata["player"] is None:
99 if not(name in nick_users):
100 nick_users.append(name)
101 nick_num = nick_num + 1
102 label_nicked = Label(root, text=name + f" is nicked ({nick_num})", bg="black", fg="white")
103 label_nicked.grid(row=row_num, column=0)
104 if nick_num == 2:
105 leave_game()
106 nick_num = 0
107 else:
108 try:
109 fkills = int(userdata["player"]["stats"]["Bedwars"]["final_kills_bedwars"])
110 except:
111 fkills = 0
112 try:
113 fdeaths = int(userdata["player"]["stats"]["Bedwars"]["final_deaths_bedwars"])
114 except:
115 fdeaths = 0
116 try:
117 wins = int(userdata["player"]["stats"]["Bedwars"]["wins_bedwars"])
118 except:
119 wins = 0
120 try:
121 losses = int(userdata["player"]["stats"]["Bedwars"]["losses_bedwars"])
122 except:
123 losses = 0
124 try:
125 exp = int(userdata["player"]["stats"]["Bedwars"]["Experience"])
126 except:
127 exp = 0
128 try:
129 ws = int(userdata["player"]["stats"]["Bedwars"]["winstreak"])
130 except:
131 ws = 0
132 try:
133 beds = int(userdata["player"]["stats"]["Bedwars"]["beds_broken_bedwars"])
134 except:
135 beds = 0
136 level = bedwarsl(exp)
137 wlr = wins / zero_num(losses)
138 wlr1 = round(10*wlr)/10
139 fkdr = fkills / zero_num(fdeaths)
140 fkdr = round(10*fkdr)/10
141 wins1 = str(round(10*(wins/1000))/10) + "K"
142 fkills1 = str(round(10*(fkills/1000))/10) + "K"
143 if fkdr >= 2 or level >= 200 or wlr1 >= 1.3 or fkills >= 4000 or beds >= 2500 :
144 namel = Label(root, text=name + " ", bg="black", fg="red")
145 namel.grid(row=row_num, column=0)
146 killsl = Label(root, text=str(fkdr) + " ", bg="black", fg="red")
147 killsl.grid(row=row_num, column=1)
148 deathsl = Label(root, text=str(wlr1) + " ", bg="black", fg="red")
149 deathsl.grid(row=row_num, column=2)
150 winsl = Label(root, text=str(ws) + " ", bg="black", fg="red")
151 winsl.grid(row=row_num, column=3)
152 lossesl = Label(root, text=str(level) + " ", bg="black", fg="red")
153 lossesl.grid(row=row_num, column=4)
154 wsl = Label(root, text=str(fkills1) + " ", bg="black", fg="red")
155 wsl.grid(row=row_num, column=5)
156 wlrl = Label(root, text=str(wins1) + " ", bg="black", fg="red")
157 wlrl.grid(row=row_num, column=6)
158 leave_game()
159 elif level >= 100 :
160 namel = Label(root, text=name + " ", bg="black", fg="yellow")
161 namel.grid(row=row_num, column=0)
162 killsl = Label(root, text=str(fkdr) + " ", bg="black", fg="yellow")
163 killsl.grid(row=row_num, column=1)
164 deathsl = Label(root, text=str(wlr1) + " ", bg="black", fg="yellow")
165 deathsl.grid(row=row_num, column=2)
166 winsl = Label(root, text=str(ws) + " ", bg="black", fg="yellow")
167 winsl.grid(row=row_num, column=3)
168 lossesl = Label(root, text=str(level) + " ", bg="black", fg="yellow")
169 lossesl.grid(row=row_num, column=4)
170 wsl = Label(root, text=str(fkills1) + " ", bg="black", fg="yellow")
171 wsl.grid(row=row_num, column=5)
172 wlrl = Label(root, text=str(wins1) + " ", bg="black", fg="yellow")
173 wlrl.grid(row=row_num, column=6)
174 else:
175 namel = Label(root, text=name + " ", bg="black", fg="white")
176 namel.grid(row=row_num, column=0)
177 killsl = Label(root, text=str(fkdr) + " ", bg="black", fg="white")
178 killsl.grid(row=row_num, column=1)
179 deathsl = Label(root, text=str(wlr1) + " ", bg="black", fg="white")
180 deathsl.grid(row=row_num, column=2)
181 winsl = Label(root, text=str(ws) + " ", bg="black", fg="white")
182 winsl.grid(row=row_num, column=3)
183 lossesl = Label(root, text=str(level) + " ", bg="black", fg="white")
184 lossesl.grid(row=row_num, column=4)
185 wsl = Label(root, text=str(fkills1) + " ", bg="black", fg="white")
186 wsl.grid(row=row_num, column=5)
187 wlrl = Label(root, text=str(wins1) + " ", bg="black", fg="white")
188 wlrl.grid(row=row_num, column=6)
189
190
191def follow(thefile): # func to follow the log file and read the new lines
192
193 thefile.seek(0,2)
194 while True:
195 try:
196 line = thefile.readline()
197 except:
198 break
199 if not line:
200 time.sleep(0.1)
201 continue
202 yield line
203def start(path): # func to check the line info
204 global game
205 global players_exists
206 global API_KEY
207 global row_num
208 global logfile
209 players_exists = []
210 global player_to_row
211 if True:
212 global logfile
213 logfile = open(path, "r")
214 loglines = follow(logfile)
215
216 for line in loglines:
217 if "Sending you to" in line: # joined new game
218 game = True
219 clear()
220 root.geometry("425x425")
221 row_num = 1
222 players_exists = []
223 player_to_row = {}
224 time.sleep(3)
225 auto_who()
226 elif "ONLINE" in line: # the info of the /who message
227 line = line.split(" [CHAT] ONLINE: ")[1].split(", ")
228 line[-1] = line[-1].replace("\n", "")
229 row_num2 = row_num
230 for player in line:
231 if not(player in players_exists) and not(player.lower() in players_in_user_team):
232 row_num2 += 1
233 player_to_row[player] = row_num2
234 for player in line:
235 if not(player in players_exists) and not(player.lower() in players_in_user_team):
236 players_exists.append(player)
237 row_num += 1
238 player_to_row[player] = row_num
239 checking_stats(player, row_num, root)
240 elif "has joined" in line: # a player joined the game
241 root.geometry("425x425")
242 line = line.split()
243 if line[4] == user_name:
244 if game == False:
245 game = True
246 root.geometry("425x425")
247 row_num = 1
248 players_exists = []
249 player_to_row = {}
250 clear()
251 auto_who()
252 if not(line[4] in players_exists) and not(line[4].lower() in players_in_user_team) :
253 players_exists.append(line[4])
254 row_num += 1
255 player_to_row[line[4]] = row_num
256 checking_stats(line[4], row_num, root)
257 elif "has quit" in line:
258 line = line.split()
259 if line[4] in players_exists:
260 for label in root.grid_slaves():
261 if int(label.grid_info()["row"]) == int(player_to_row[line[4]]):
262 label.grid_forget()
263 players_exists.remove(line[4])
264 del player_to_row[line[4]]
265 elif "Protect your bed and destroy the enemy beds." in line:
266 game = False
267 root.after(12000, lambda: root.geometry("0x0"))
268 elif "Your new API key is" in line:
269 line = line.split()
270 clear()
271 with open("data.json", "w") as json_file:
272 data["api_key"] = line[9]
273 to_write_data = json.dumps(data)
274 API_KEY = line[9]
275 json_file.write(to_write_data)
276 json_file.close()
277try:
278 global path1
279 global API_KEY
280 data_file = open("data.json", "r")
281 data = json.load(data_file)
282 API_KEY = data["api_key"]
283 client = data["client"]
284 if client == 'lunar':
285 path1 = home + "\\.lunarclient\\offline\\1.8\\logs\\latest.log"
286 t2 = threading.Thread(target = lambda: start(path1))
287 t2.daemon = True
288 root.after(0,t2.start)
289 elif client == 'blc':
290 path1 = os.getenv("APPDATA")+ "\\.minecraft\\logs\\blclient\\minecraft\\latest.log"
291 t2 = threading.Thread(target = lambda: start(path1))
292 t2.daemon = True
293 root.after(0,t2.start)
294 elif client == 'lounge':
295 path1 = os.getenv("APPDATA") + "\\.pvplounge\\logs\\latest.log"
296 t2 = threading.Thread(target = lambda: start(path1))
297 t2.daemon = True
298 root.after(0,t2.start)
299 else:
300 err_label = Label(root, text="Cleint error (Do /api new)", bg="black", fg="red")
301 err_label.grid(row=2, column=0)
302 data_file.close()
303except:
304 err_label = Label(root, text="Api_Key error (Do /api new)", bg="black", fg="red")
305 err_label.grid(row=2, column=0)
306 data = {}
307def start_pvp():# func to check the line info
308 global logfile
309 global API_KEY
310 try:
311 pvp_file = open(os.getenv("APPDATA") + "\\.pvplounge\\logs\\latest.log", 'r')
312 except:
313 return
314 if True:
315 loglines = follow(pvp_file)
316
317 for line in loglines:
318 if "Your new API key is" in line: # joined new game
319 line = line.split()
320 clear()
321 with open("data.json", "w") as json_file:
322 data["api_key"] = line[9]
323 data["client"] = 'lounge'
324 path_lounge = os.getenv("APPDATA") + "\\.pvplounge\\logs\\latest.log"
325 to_write_data = json.dumps(data)
326 API_KEY = line[9]
327 json_file.write(to_write_data)
328 json_file.close()
329 try:
330 logfile.close()
331 except:
332 pass
333 t5 = threading.Thread(target=lambda: start(path_lounge))
334 t5.daemon = True
335 t5.start()
336def start_lunar():
337 # func to check the line info
338 global API_KEY
339 global logfile
340 try:
341 lunar_file = open(home + "\\.lunarclient\\offline\\1.8\\logs\\latest.log", 'r')
342 except:
343 return
344 if True:
345 loglines = follow(lunar_file)
346
347 for line in loglines:
348 if "Your new API key is" in line: # joined new game
349 line = line.split()
350 clear()
351 with open("data.json", "w") as json_file:
352 data["api_key"] = line[9]
353 data["client"] = 'lunar'
354 path_lunar = home + "\\.lunarclient\\offline\\1.8\\logs\\latest.log"
355 to_write_data = json.dumps(data)
356 API_KEY = line[9]
357 json_file.write(to_write_data)
358 json_file.close()
359 try:
360 logfile.close()
361 except:
362 pass
363 t5 = threading.Thread(target=lambda: start(path_lunar))
364 t5.daemon = True
365 t5.start()
366def start_blc():
367 # func to check the line info
368 global API_KEY
369 global logfile
370 try:
371 lunar_file = open(os.getenv("APPDATA")+ "\\.minecraft\\logs\\blclient\\minecraft\\latest.log", 'r')
372 except:
373 return
374 if True:
375 loglines = follow(lunar_file)
376
377 for line in loglines:
378 if "Your new API key is" in line: # joined new game
379 line = line.split()
380 clear()
381 with open("data.json", "w") as json_file:
382 data["api_key"] = line[9]
383 data["client"] = 'blc'
384 path_blc = os.getenv("APPDATA")+ "\\.minecraft\\logs\\blclient\\minecraft\\latest.log"
385 to_write_data = json.dumps(data)
386 API_KEY = line[9]
387 json_file.write(to_write_data)
388 json_file.close()
389 try:
390 logfile.close()
391 except:
392 pass
393 t5 = threading.Thread(target=lambda: start(path_blc))
394 t5.daemon = True
395 t5.start()
396
397t3 = threading.Thread(target =start_pvp)
398t3.daemon = True
399root.after(0,t3.start)
400t4 = threading.Thread(target =start_lunar)
401t4.daemon = True
402root.after(0,t4.start)
403t6 = threading.Thread(target =start_blc)
404t6.daemon = True
405root.after(0,t6.start)
406root.mainloop()