From 63515c1d5f69f8dcdff5c9c84227bce7336b8d52 Mon Sep 17 00:00:00 2001 From: Alberto Xamin Date: Tue, 3 Jan 2023 20:51:51 +0000 Subject: [PATCH] easier replayes --- backend/bang/game.py | 2 +- backend/server.py | 21 +++++++++++++++++---- frontend/src/components/Lobby.vue | 4 ++-- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/backend/bang/game.py b/backend/bang/game.py index 3174061..bb0bc09 100644 --- a/backend/bang/game.py +++ b/backend/bang/game.py @@ -137,7 +137,7 @@ class Game: # chat_message(None, cmd[2], player) if i == fast_forward: self.replay_speed = 1.0 - + self.notify_room() eventlet.sleep(max(self.replay_speed, 0.1)) eventlet.sleep(6) if self.is_replay: diff --git a/backend/server.py b/backend/server.py index 0e98f4e..94c7d10 100644 --- a/backend/server.py +++ b/backend/server.py @@ -46,7 +46,7 @@ blacklist: List[str] = [] def advertise_lobbies(): sio.emit('lobbies', room='lobby', data=[{'name': g.name, 'players': len(g.players), 'locked': g.password != ''} for g in games if not g.started and len(g.players) < 10 and not g.is_hidden]) - sio.emit('spectate_lobbies', room='lobby', data=[{'name': g.name, 'players': len(g.players), 'locked': g.password != ''} for g in games if g.started]) + sio.emit('spectate_lobbies', room='lobby', data=[{'name': g.name, 'players': len(g.players), 'locked': g.password != ''} for g in games if g.started and not g.is_hidden]) Metrics.send_metric('lobbies', points=[len([g for g in games if not g.is_replay])]) Metrics.send_metric('online_players', points=[online_players]) @@ -76,13 +76,13 @@ def report(sid, text): response = requests.post("https://hastebin.com/documents", data) key = json.loads(response.text).get('key') if "DISCORD_WEBHOOK" in os.environ and len(os.environ['DISCORD_WEBHOOK']) > 0: - webhook = DiscordWebhook(url=os.environ['DISCORD_WEBHOOK'], content=f'New bug report, replay at https://hastebin.com/documents/{key}') + webhook = DiscordWebhook(url=os.environ['DISCORD_WEBHOOK'], content=f'New bug report, replay at https://bang.xamin.it/game?replay={key}') response = webhook.execute() sio.emit('chat_message', room=sid, data={'color': f'green','text':f'Report OK'}) else: print("WARNING: DISCORD_WEBHOOK not found") Metrics.send_event('BUG_REPORT', event_data=text) - print(f'New bug report, replay at https://hastebin.com/documents/{key}') + print(f'New bug report, replay at https://bang.xamin.it/game?replay={key}') @sio.event def set_username(sid, username): @@ -113,6 +113,19 @@ def get_me(sid, room): else: dt = room["discord_token"] if 'discord_token' in room else None sio.save_session(sid, Player('player', sid, sio, discord_token=dt)) + if 'replay' in room and room['replay'] != None: + create_room(sid, room['replay']) + sid = sio.get_session(sid) + sid.game.is_hidden = True + eventlet.sleep(0.5) + response = requests.get(f"https://hastebin.com/raw/{room['replay']}") + if response.status_code != 200: + sio.emit('chat_message', room=sid, data={'color': f'green','text':f'Invalid replay code'}) + return + log = response.text.splitlines() + sid.game.spectators.append(sid) + sid.game.replay(log) + return de_games = [g for g in games if g.name == room['name']] if len(de_games) == 1 and not de_games[0].started: join_room(sid, room) @@ -377,7 +390,7 @@ def chat_message(sid, msg, pl=None): _cmd = msg.split() if len(_cmd) >= 2: replay_id = _cmd[1] - response = requests.get(f"https://hastebin.com/documents/{replay_id}") + response = requests.get(f"https://hastebin.com/raw/{replay_id}") log = response.text.splitlines() ses.game.spectators.append(ses) if len(_cmd) == 2: diff --git a/frontend/src/components/Lobby.vue b/frontend/src/components/Lobby.vue index eacdade..98cd654 100644 --- a/frontend/src/components/Lobby.vue +++ b/frontend/src/components/Lobby.vue @@ -383,9 +383,9 @@ export default { mounted() { if (Vue.config.devtools) console.log('mounted lobby') - if (!this.$route.query.code) + if (!this.$route.query.code && !this.$route.query.replay) return this.$router.push('/') - this.$socket.emit('get_me', {name:this.$route.query.code, password:this.$route.query.pwd, username: localStorage.getItem('username'), discord_token: localStorage.getItem('discord_token')}) + this.$socket.emit('get_me', {name:this.$route.query.code, password:this.$route.query.pwd, username: localStorage.getItem('username'), discord_token: localStorage.getItem('discord_token'), replay: this.$route.query.replay}) }, }