diff --git a/pterodactyl/pterodactyl.py b/pterodactyl/pterodactyl.py index 722502d..3e7bfbe 100644 --- a/pterodactyl/pterodactyl.py +++ b/pterodactyl/pterodactyl.py @@ -47,27 +47,32 @@ class Pterodactyl(commands.Cog): self.logger.error('Failed to retrieve Pterodactyl websocket: %s', e) return - async with websockets.connect(websocket_credentials['data']['socket'], extra_headers=extra_headers) as websocket: - self.logger.debug("WebSocket connection established") + async for websocket in websockets.connect(websocket_credentials['data']['socket'], extra_headers=extra_headers): + try: + self.logger.debug("WebSocket connection established") - auth_message = json.dumps({"event": "auth", "args": [websocket_credentials['data']['token']]}) - await websocket.send(auth_message) - self.logger.debug("Authentication message sent") + auth_message = json.dumps({"event": "auth", "args": [websocket_credentials['data']['token']]}) + await websocket.send(auth_message) + self.logger.debug("Authentication message sent") - self.client = client - self.websocket = websocket + self.client = client + self.websocket = websocket - while True: - message = await websocket.recv() - if json.loads(message)['event'] in ['token expiring', 'token expired']: - self.logger.debug("Received token expiring/expired event. Refreshing token.") - websocket_credentials = client.servers.get_websocket(server_id) - auth_message = json.dumps({"event": "auth", "args": [websocket_credentials['data']['token']]}) - await websocket.send(auth_message) - self.logger.debug("Authentication message sent") - if json.loads(message)['event'] == 'auth success': - self.logger.debug("Authentication successful") - self.logger.debug("Received message: %s", message) + while True: + message = await websocket.recv() + if json.loads(message)['event'] in ['token expiring', 'token expired']: + self.logger.debug("Received token expiring/expired event. Refreshing token.") + websocket_credentials = client.servers.get_websocket(server_id) + auth_message = json.dumps({"event": "auth", "args": [websocket_credentials['data']['token']]}) + await websocket.send(auth_message) + self.logger.debug("Authentication message sent") + if json.loads(message)['event'] == 'auth success': + self.logger.debug("Authentication successful") + self.logger.debug("Received message: %s", message) + except websockets.exceptions.ConnectionClosed as e: + self.logger.debug("WebSocket connection closed: %s", e) + websocket_credentials = client.servers.get_websocket(server_id) + continue def get_task(self): return self.bot.loop.create_task(self.establish_websocket_connection(), name="Pterodactyl Websocket Connection")