Skip to content

Commit

Permalink
Added ability to join other rooms
Browse files Browse the repository at this point in the history
  • Loading branch information
gizmo4487 committed May 12, 2020
1 parent e2c642c commit d251d79
Showing 1 changed file with 77 additions and 19 deletions.
96 changes: 77 additions & 19 deletions tetrio-chat.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
import requests
import os

#test_gmupdate = {'id': 'X-QP', 'type': 'system', 'auto': {'status': 'ingame', 'time': 30, 'maxtime': 30}, 'players': [{'_id': '5ea2a686d4cd05328d2f9190', 'username': 'iii', 'anon': False, 'xp': 126992, 'record': {'games': 25, 'wins': 13, 'streak': 4}, 'bracket': 'player', 'supporter': False}, {'_id': '5eadd7c86a0210711521d1f1', 'username': 'btmcsniper', 'anon': False, 'xp': 11881, 'record': {'games': 16, 'wins': 1, 'streak': 0}, 'bracket': 'player', 'supporter': False}, {'_id': '5eab40990a3f8035f3649df5', 'username': 'benderprime', 'anon': False, 'xp': 95606, 'record': {'games': 13, 'wins': 0, 'streak': 0}, 'bracket': 'player', 'supporter': False}, {'_id': '5ea8afe7774f3a6e56d16067', 'username': 'jujube', 'anon': False, 'xp': 84977, 'record': {'games': 10, 'wins': 1, 'streak': 0}, 'bracket': 'player', 'supporter': True}, {'_id': '5e9f869283e2a23fbb017765', 'username': 'connection', 'anon': False, 'xp': 149679, 'record': {'games': 3, 'wins': 0, 'streak': 0}, 'bracket': 'player', 'supporter': False}, {'_id': '5ea43bfdaf3d4614a0d6947a', 'username': 'thechilledlemon', 'anon': False, 'xp': 95773, 'record': {'games': 1, 'wins': 0, 'streak': 0}, 'bracket': 'player', 'supporter': False}, {'_id': '5e8b693133e7875e3ffe4118', 'username': 'darko', 'anon': False, 'xp': 264421, 'record': {'games': 0, 'wins': 0, 'streak': 0}, 'bracket': 'player', 'supporter': False}, {'_id': '5eadda641f8158710c060538', 'username': 'pepocheer', 'anon': False, 'xp': 1235, 'record': {'games': 0, 'wins': 0, 'streak': 0}, 'bracket': 'player', 'supporter': False}, {'_id': '5e471da5b77d7f0d4be53684', 'username': 'kimchi', 'anon': False, 'xp': 325735, 'record': {'games': 0, 'wins': 0, 'streak': 0}, 'bracket': 'player', 'supporter': False}, {'_id': '5e9a95529652df7e441cb9d8', 'username': 'jaypal', 'anon': False, 'xp': 189505, 'record': {'games': 0, 'wins': 0, 'streak': 0}, 'bracket': 'player', 'supporter': False}, {'_id': '5e3f8acc2521796f629aa89b', 'username': 'gizmo4487', 'anon': False, 'xp': 692662, 'record': {'games': 0, 'wins': 0, 'streak': 0}, 'bracket': 'spectator', 'supporter': False}], 'game': {'state': 'ingame', 'options': {'version': 14, 'seed_random': False, 'seed': 187156, 'g': 0.05, 'stock': 0, 'countdown': True, 'countdown_count': 3, 'countdown_interval': 1000, 'precountdown': 5000, 'prestart': 1000, 'mission': 'MULTIPLEX TEST', 'mission_type': 'mission_versus', 'zoominto': 'slow', 'display_lines': False, 'display_attack': True, 'display_pieces': True, 'display_impending': True, 'display_kills': True, 'display_placement': True, 'hasgarbage': True, 'neverstopbgm': True, 'display_next': True, 'display_hold': True, 'gmargin': 0, 'gincrease': 0.0025, 'garbagemultiplier': 1, 'garbagemargin': 10800, 'garbageincrease': 0.008, 'garbagecap': 4, 'garbagecapincrease': 0.033, 'garbagecapmax': 10, 'bagtype': '7bag', 'spinbonuses': 'T-spins', 'kickset': 'SRS', 'nextcount': 5, 'allow_harddrop': True, 'display_shadow': True, 'locktime': 30, 'garbagespeed': 20, 'forfeit_time': 150, 'are': 0, 'lineclear_are': 0, 'infinitemovement': False, 'lockresets': 15, 'allow180': True, 'objective': {'type': 'none'}, 'room_handling': False, 'room_handling_arr': 2, 'room_handling_das': 10, 'room_handling_sdf': 6, 'manual_allowed': False, 'b2bchaining': True}, 'match': {'type': 'versus', 'ft': 1, 'gamemode': 'VERSUS', 'winningKey': 'STAY_ALIVE', 'keys': {'primary': 'TIME', 'primaryLabel': 'ALIVE', 'primaryLabelSingle': 'ALIVE', 'primaryIsAvg': False, 'secondary': 'stats.garbage.sent', 'secondaryLabel': 'LINES SENT', 'secondaryLabelSingle': 'LINE SENT', 'secondaryIsAvg': False, 'tertiary': 'stats.garbage.received', 'tertiaryLabel': 'LINES RECEIVED', 'tertiaryLabelSingle': 'LINE RECEIVED', 'tertiaryIsAvg': False}, 'extra': {}}}, 'owner': None, 'meta': {'name': 'QUICK PLAY', 'userlimit': 0, 'allowAnonymous': True, 'bgm': 'RANDOM', 'match': {'type': 'versus', 'ft': 1}}}
handling = {"arr":"0","das":"5.4","sdf":"21"}
authToken = ""

try:
tokenFile = open("token.txt","r")
authToken = tokenFile.read()
Expand All @@ -34,6 +34,7 @@
sio = socketio.Client()
inRoom = False
currentRoom = ""
rooms = {}

@sio.event
def connect():
Expand All @@ -52,14 +53,16 @@ def disconnect():
print("Disconnected!")
menuframe.grid_remove()
gameframe.grid_remove()
roomframe.grid_remove()
mainframe.grid()


@sio.on('kick')
def on_message(data):
print("The server has disconnected you.",data)
print(f"The server has disconnected you. Reason: {data['reason']}")
menuframe.grid_remove()
gameframe.grid_remove()
roomframe.grid_remove()
mainframe.grid()

@sio.on('authorize')
Expand All @@ -68,7 +71,6 @@ def on_message(data):
print("Login successful!")
mainframe.grid_remove()
menuframe.grid()
#commands()
else:
print("Login failed!", data)

Expand All @@ -77,13 +79,13 @@ def on_message(data):
global inRoom
if(inRoom==False):
inRoom=True
sio.emit("switchbracket","spectator") # Enter spectator mode
currentRoom = data['id']
chatbox.configure(state="normal")
chatbox.delete("1.0",END)
chatbox.configure(state="disabled")
menuframe.grid_remove()
roomframe.grid_remove()
gameframe.grid()
#print(data)
update(data)

@sio.on('chat')
Expand All @@ -98,15 +100,6 @@ def dc():
sio.disconnect()
menuframe.grid_remove()
mainframe.grid()

def spec():
global inRoom
if(inRoom==True):
print("Spectating!\n")
sio.emit('switchbracket','spectator')
else:
print("You are not in a room!\n")
#commands()

def join(roomID):
global inRoom
Expand All @@ -116,7 +109,6 @@ def join(roomID):
sio.emit('joinroom',roomID)
else:
print("You are already in a room!\n")
#commands()

def leave():
global inRoom
Expand Down Expand Up @@ -147,7 +139,6 @@ def chat(msg):
chatinput.delete("0.0",END)
else:
print("You are not in a room!")
#commands()

def socketConnect():
print("Connecting...")
Expand All @@ -170,6 +161,10 @@ def update(message):
roomnameLabel.configure(text=(message['meta']['name']))
playerlabel.configure(text=f"Players ({len(players)})")
for i in range(len(players)):
if(players[i]['username']==myUsername):
if(players[i]['bracket']=="player"):
print("Moving to spectators")
sio.emit("switchbracket","spectator")
playerlistbox.insert(END, players[i]['username'])

def enterkeychat(event):
Expand All @@ -184,6 +179,46 @@ def sendchat():
def quit():
os._exit(0)

def showrooms():
getrooms()
menuframe.grid_remove()
roomframe.grid()

def getrooms():
global rooms
rooms = {}
roomlistbox.delete(0,END)
roomlist = (requests.get(url="https://tetr.io/api/rooms", headers=headers)).json()
for key, value in roomlist.items():
if(key=="rooms"):
rooms = value
for i in range(len(rooms)):
roomlistbox.insert(END, rooms[i]['meta']['name'])

def joinbylist():
try:
for i in range(len(rooms)):
if((roomlistbox.get(roomlistbox.curselection()))==rooms[i]['meta']['name']):
join(rooms[i]['id'])
break
except tk.TclError:
print("Nothing is selected!")

def goBack():
roomframe.grid_remove()
menuframe.grid()

def joinbyid():
roomID = roomidentry.get("0.0",'1.end')
roomidentry.delete("0.0",END)
if(((len(roomID))!=9)and(roomID!="X-QP")):
print("Invalid room ID!")
else:
join(roomID)

def enterkeyjoin(event):
joinbyid()
return 'break'

versionString = f"TETR.IO version: {tetrio_data['signature']['version']}"
userString = f"Username: {myUsername}"
Expand All @@ -208,6 +243,11 @@ def quit():
gameframe.grid(column=0, row=0, sticky=(N, W, E, S))
gameframe.grid_remove() # Hide game lobby screen until a room is joined

# Prepare room join screen (custom rooms)
roomframe = ttk.Frame(gui, padding="4 4 4 4")
roomframe.grid(column=0, row=0, sticky=(N, W, E, S))
roomframe.grid_remove()


logo = Image.open("resources/logo.png")
tkimage = ImageTk.PhotoImage(logo)
Expand All @@ -227,7 +267,8 @@ def quit():
# Multiplayer menu
ttk.Label(menuframe, text="Main Menu", style='subtitle.TLabel').grid(column=1, row=1, sticky="N", padx=430, pady=32)
quickPlayButton = ttk.Button(menuframe, text="Quick Play", command=qp).grid(column=1, row=2, sticky="N", padx=450, pady=8)
disconnectButton = ttk.Button(menuframe, text="Disconnect", command=dc).grid(column=1, row=3, sticky="N", padx=450, pady=8)
roomButton = ttk.Button(menuframe, text="Join room", command=showrooms).grid(column=1, row=3, sticky="N", padx=450, pady=8)
disconnectButton = ttk.Button(menuframe, text="Disconnect", command=dc).grid(column=1, row=4, sticky="N", padx=450, pady=8)

# Room lobby
exitButton = ttk.Button(gameframe, text="Exit", command=leave).grid(column=1, row=1, sticky=(N,W), padx=16)
Expand Down Expand Up @@ -255,7 +296,24 @@ def quit():
chatSendButton = ttk.Button(gameframe, text="Send", command=sendchat)
chatSendButton.grid(column=3, row=5, sticky="N")

#debugPlayerButton = ttk.Button(gameframe, text="DEBUG: Perform gmupdate", command=update).grid(column=2, row=3, sticky="N")
#debugChatButton = ttk.Button(gameframe, text="DEBUG: New message", command=newchat).grid(column=2, row=4, sticky="N")
# Room join screen
separator = ttk.Frame(roomframe,padding="4 4 4 4").grid(column=1, row=1, padx=215)
joinlabel = ttk.Label(roomframe, text="Join Room", style='subtitle.TLabel').grid(column=2, row=1, sticky="N")
roomlistbox = tk.Listbox(roomframe, height=10)
roomlistbox.grid(column=2, row=2, sticky="N", pady=8)
roomVscroll = ttk.Scrollbar(roomframe, orient=VERTICAL, command=roomlistbox.yview)
roomVscroll.grid(column=3, row=2, sticky="N, S, W")
roomlistbox['yscrollcommand']=roomVscroll.set
roomHscroll = ttk.Scrollbar(roomframe, orient=HORIZONTAL, command=roomlistbox.xview)
roomHscroll.grid(column=2, row=3, sticky="W, E")
roomlistbox['xscrollcommand']=roomHscroll.set
joinButton = ttk.Button(roomframe, text="Join", command=joinbylist).grid(column=2, row=4, sticky="N", pady=8)
refreshButton = ttk.Button(roomframe, text="Refresh", command=getrooms).grid(column=2, row=5, sticky="N", pady=8)
backButton = ttk.Button(roomframe, text="Back to Menu", command=goBack).grid(column=2, row=6, sticky="N", pady=8)
joinidlabel = ttk.Label(roomframe, text="Join by ID:").grid(column=2, row=7, sticky="N", pady=16)
roomidentry = tk.Text(roomframe, width=10, height=1)
roomidentry.grid(column=2, row=8, sticky="N")
roomidentry.bind('<Return>',enterkeyjoin)
joinidbutton = ttk.Button(roomframe, text="Join", command=joinbyid).grid(column=2, row=9, sticky="N", pady=8)

gui.mainloop()

0 comments on commit d251d79

Please sign in to comment.