diff --git a/src/client/rest/RESTManager.js b/src/client/rest/RESTManager.js index 62f8e971f..8a1b0f9e5 100644 --- a/src/client/rest/RESTManager.js +++ b/src/client/rest/RESTManager.js @@ -2,6 +2,7 @@ const UserAgentManager = require('./UserAgentManager'); const RESTMethods = require('./RESTMethods'); const SequentialRequestHandler = require('./RequestHandlers/Sequential'); const APIRequest = require('./APIRequest'); +const Constants = require('../../util/Constants'); class RESTManager { @@ -23,11 +24,21 @@ class RESTManager { }); } + getRequestHandler() { + switch (this.client.options.api_request_method) { + case 'sequential': + return SequentialRequestHandler; + default: + throw Constants.Errors.INVALID_RATE_LIMIT_METHOD; + } + } + makeRequest(method, url, auth, data, file) { const apiRequest = new APIRequest(this, method, url, auth, data, file); if (!this.handlers[apiRequest.getEndpoint()]) { - this.handlers[apiRequest.getEndpoint()] = new SequentialRequestHandler(this); + const RequestHandlerType = this.getRequestHandler(); + this.handlers[apiRequest.getEndpoint()] = new RequestHandlerType(this); } return this.push(this.handlers[apiRequest.getEndpoint()], apiRequest); diff --git a/src/util/Constants.js b/src/util/Constants.js index ae8ba951c..abe9bf778 100644 --- a/src/util/Constants.js +++ b/src/util/Constants.js @@ -13,6 +13,7 @@ exports.DefaultOptions = { protocol_version: 6, max_message_cache: 200, rest_ws_bridge_timeout: 5000, + api_request_method: 'sequential', }; exports.Status = { @@ -37,6 +38,7 @@ exports.Errors = { BAD_WS_MESSAGE: new Error('a bad message was received from the websocket - bad compression or not json'), TOOK_TOO_LONG: new Error('something took too long to do'), NOT_A_PERMISSION: new Error('that is not a valid permission number'), + INVALID_RATE_LIMIT_METHOD: new Error('unknown rate limiting method'), }; const API = 'https://discordapp.com/api';