mirror of
https://github.com/discordjs/discord.js.git
synced 2026-06-01 08:30:08 +00:00
* Backporting audit log reasons and createRole with position for 11.2 * Sending kick reason via header rather than via query
57 lines
1.6 KiB
JavaScript
57 lines
1.6 KiB
JavaScript
const UserAgentManager = require('./UserAgentManager');
|
|
const RESTMethods = require('./RESTMethods');
|
|
const SequentialRequestHandler = require('./RequestHandlers/Sequential');
|
|
const BurstRequestHandler = require('./RequestHandlers/Burst');
|
|
const APIRequest = require('./APIRequest');
|
|
const Constants = require('../../util/Constants');
|
|
|
|
class RESTManager {
|
|
constructor(client) {
|
|
this.client = client;
|
|
this.handlers = {};
|
|
this.userAgentManager = new UserAgentManager(this);
|
|
this.methods = new RESTMethods(this);
|
|
this.rateLimitedEndpoints = {};
|
|
this.globallyRateLimited = false;
|
|
}
|
|
|
|
destroy() {
|
|
for (const handlerID in this.handlers) {
|
|
this.handlers[handlerID].destroy();
|
|
}
|
|
}
|
|
|
|
push(handler, apiRequest) {
|
|
return new Promise((resolve, reject) => {
|
|
handler.push({
|
|
request: apiRequest,
|
|
resolve,
|
|
reject,
|
|
});
|
|
});
|
|
}
|
|
|
|
getRequestHandler() {
|
|
switch (this.client.options.apiRequestMethod) {
|
|
case 'sequential':
|
|
return SequentialRequestHandler;
|
|
case 'burst':
|
|
return BurstRequestHandler;
|
|
default:
|
|
throw new Error(Constants.Errors.INVALID_RATE_LIMIT_METHOD);
|
|
}
|
|
}
|
|
|
|
makeRequest(method, url, auth, data, file, reason) {
|
|
const apiRequest = new APIRequest(this, method, url, auth, data, file, reason);
|
|
if (!this.handlers[apiRequest.route]) {
|
|
const RequestHandlerType = this.getRequestHandler();
|
|
this.handlers[apiRequest.route] = new RequestHandlerType(this, apiRequest.route);
|
|
}
|
|
|
|
return this.push(this.handlers[apiRequest.route], apiRequest);
|
|
}
|
|
}
|
|
|
|
module.exports = RESTManager;
|