diff --git a/src/client/websocket/packets/WebSocketPacketManager.js b/src/client/websocket/packets/WebSocketPacketManager.js index 25e17861b..3295ef646 100644 --- a/src/client/websocket/packets/WebSocketPacketManager.js +++ b/src/client/websocket/packets/WebSocketPacketManager.js @@ -84,6 +84,8 @@ class WebSocketPacketManager { this.setSequence(packet.s); + if (this.ws.client.options.disabledEvents.includes(packet.t)) return false; + if (this.ws.status !== Constants.Status.READY) { if (BeforeReadyWhitelist.indexOf(packet.t) === -1) { this.queue.push(packet); diff --git a/src/util/Constants.js b/src/util/Constants.js index 6db424e39..0ac069a5c 100644 --- a/src/util/Constants.js +++ b/src/util/Constants.js @@ -17,6 +17,9 @@ exports.Package = require('../../package.json'); * @property {boolean} [disableEveryone=false] Default value for MessageOptions.disableEveryone * @property {number} [restWsBridgeTimeout=5000] Maximum time permitted between REST responses and their * corresponding websocket events + * @property {string[]} [disabledEvents] An array of disabled websocket events. Events in this array will not be + * processed. Disabling useless events such as 'TYPING_START' can result in significant performance increases on + * large-scale bots. * @property {WebsocketOptions} [ws] Options for the websocket */ exports.DefaultOptions = { @@ -29,6 +32,7 @@ exports.DefaultOptions = { fetchAllMembers: false, disableEveryone: false, restWsBridgeTimeout: 5000, + disabledEvents: [], /** * Websocket options. These are left as snake_case to match the API.