From bd1449bc5a3a7a15ef809267f8080bd560fd39d7 Mon Sep 17 00:00:00 2001 From: Gus Caplan Date: Sat, 24 Sep 2016 11:55:31 -0500 Subject: [PATCH] make login sane (#735) --- src/client/ClientManager.js | 4 ++++ src/client/websocket/WebSocketManager.js | 8 ++++++-- src/util/Constants.js | 1 + 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/client/ClientManager.js b/src/client/ClientManager.js index e1d80bb1d..25e732ca8 100644 --- a/src/client/ClientManager.js +++ b/src/client/ClientManager.js @@ -32,6 +32,10 @@ class ClientManager { this.client.rest.methods.getGateway().then(gateway => { this.client.emit(Constants.Events.DEBUG, `Using gateway ${gateway}`); this.client.ws.connect(gateway); + this.client.ws.once('close', event => { + if (event.code === 4004) reject(new Error(Constants.Errors.BAD_LOGIN)); + if (event.code === 4010) reject(new Error(Constants.Errors.INVALID_SHARD)); + }); this.client.once(Constants.Events.READY, () => { resolve(token); this.client.clearTimeout(timeout); diff --git a/src/client/websocket/WebSocketManager.js b/src/client/websocket/WebSocketManager.js index baf43d97f..ba5cbef49 100644 --- a/src/client/websocket/WebSocketManager.js +++ b/src/client/websocket/WebSocketManager.js @@ -1,4 +1,5 @@ const WebSocket = require('ws'); +const EventEmitter = require('events').EventEmitter; const Constants = require('../../util/Constants'); const zlib = require('zlib'); const PacketManager = require('./packets/WebSocketPacketManager'); @@ -7,8 +8,9 @@ const PacketManager = require('./packets/WebSocketPacketManager'); * The WebSocket Manager of the Client * @private */ -class WebSocketManager { +class WebSocketManager extends EventEmitter { constructor(client) { + super(); /** * The Client that instantiated this WebSocketManager * @type {Client} @@ -164,12 +166,14 @@ class WebSocketManager { * @param {Object} event The received websocket data */ eventClose(event) { + this.emit('close', event); /** * Emitted whenever the client websocket is disconnected * @event Client#disconnect */ if (!this.reconnecting) this.client.emit(Constants.Events.DISCONNECT); - if (event.code === 4004) throw new Error(Constants.Errors.BAD_LOGIN); + if (event.code === 4004) return; + if (event.code === 4010) return; if (!this.reconnecting && event.code !== 1000) this.tryReconnect(); } diff --git a/src/util/Constants.js b/src/util/Constants.js index ca89c7960..8d3c24d0e 100644 --- a/src/util/Constants.js +++ b/src/util/Constants.js @@ -72,6 +72,7 @@ exports.Errors = { NOT_A_PERMISSION: 'Invalid permission string or number.', INVALID_RATE_LIMIT_METHOD: 'Unknown rate limiting method.', BAD_LOGIN: 'Incorrect login details were provided.', + INVALID_SHARD: 'Invalid shard settings were provided', }; const API = `https://discordapp.com/api/v${exports.DefaultOptions.protocol_version}`;