diff --git a/src/client/Client.js b/src/client/Client.js index 58e7f595f..f81c72954 100644 --- a/src/client/Client.js +++ b/src/client/Client.js @@ -234,17 +234,14 @@ class Client extends EventEmitter { * @returns {Promise} */ destroy() { - return new Promise((resolve, reject) => { - this.manager.destroy().then(() => { - for (const t of this._timeouts) clearTimeout(t); - for (const i of this._intervals) clearInterval(i); - this._timeouts = []; - this._intervals = []; - this.token = null; - this.email = null; - this.password = null; - resolve(); - }).catch(reject); + return this.manager.destroy().then(() => { + for (const t of this._timeouts) clearTimeout(t); + for (const i of this._intervals) clearInterval(i); + this._timeouts.clear(); + this._intervals.clear(); + this.token = null; + this.email = null; + this.password = null; }); } diff --git a/src/client/ClientManager.js b/src/client/ClientManager.js index 89acc523a..5e2a42b04 100644 --- a/src/client/ClientManager.js +++ b/src/client/ClientManager.js @@ -58,14 +58,11 @@ class ClientManager { } destroy() { - return new Promise((resolve) => { - if (!this.client.user.bot) { - this.client.rest.methods.logout().then(resolve); - } else { - this.client.ws.destroy(); - resolve(); - } - }); + let p = Promise.resolve(); + if (!this.client.user.bot) { + p = this.client.rest.methods.logout(); + } + return p.then(() => this.client.ws.destroy()); } } diff --git a/src/client/rest/RESTMethods.js b/src/client/rest/RESTMethods.js index 2bded4206..380a7b714 100644 --- a/src/client/rest/RESTMethods.js +++ b/src/client/rest/RESTMethods.js @@ -35,7 +35,7 @@ class RESTMethods { } logout() { - return this.rest.makeRequest('post', Constants.Endpoints.logout, true); + return this.rest.makeRequest('post', Constants.Endpoints.logout, true, {}); } getGateway() { diff --git a/test/destroy.js b/test/destroy.js new file mode 100644 index 000000000..08f934de0 --- /dev/null +++ b/test/destroy.js @@ -0,0 +1,12 @@ +'use strict'; + +const Discord = require('../'); + +const client = new Discord.Client({ fetch_all_members: false, api_request_method: 'sequential' }); + +const { email, password, token } = require('./auth.json'); + +let p = client.login(token); +p = p.then(() => client.destroy()); +p = p.then(() => client.login(token)); +p = p.then(() => client.destroy());