Fixed broken ratelimit middleware
This commit is contained in:
@@ -1,22 +1,23 @@
|
||||
import {Logger} from './logger';
|
||||
|
||||
let buckets = { };
|
||||
let requestsPerSecond = 0.2;
|
||||
|
||||
export class RateLimits {
|
||||
constructor() {
|
||||
Logger.info('Initialized ratelimiting middleware');
|
||||
this.requestsPerSecond = 1;
|
||||
setInterval(this.tick, 1000 / this.requestsPerSecond);
|
||||
setInterval(this.tick, 1000 / requestsPerSecond);
|
||||
}
|
||||
|
||||
async request(obj, client, next) {
|
||||
let id = obj.author.id;
|
||||
if (id == client.user.id) { return; }
|
||||
|
||||
if (!buckets[id]) {
|
||||
Logger.debug(`New rate limiting bucket`);
|
||||
|
||||
buckets[id] = {id: id, tokens: [], lastUsed: new Date().getTime()};
|
||||
for (let i = 0; i < this.requestsPerSecond; i++) {
|
||||
for (let i = 0; i < requestsPerSecond; i++) {
|
||||
buckets[id].tokens.push(1);
|
||||
}
|
||||
|
||||
@@ -25,25 +26,24 @@ export class RateLimits {
|
||||
}
|
||||
|
||||
buckets[id].lastUsed = new Date().getTime();
|
||||
|
||||
|
||||
Logger.debug(buckets[id].tokens.length);
|
||||
if (buckets[id].tokens.length <= 0) {
|
||||
Logger.middleware(`${id} is being rate limited`);
|
||||
obj.limiting = true;
|
||||
next();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
buckets[id].tokens.pop();
|
||||
next();
|
||||
}
|
||||
|
||||
tick() {
|
||||
for (let bucket in buckets) {
|
||||
// if (buckets[bucket].lastUsed += disposeTime >= new Date().getTime()) {
|
||||
// delete buckets[bucket]; // remove element here, don't redefine
|
||||
// continue;
|
||||
// }
|
||||
if (buckets[bucket].tokens.length > this.requestsPerSecond) continue;
|
||||
if (buckets[bucket].tokens.length > requestsPerSecond) {
|
||||
continue;
|
||||
}
|
||||
buckets[bucket].tokens.push(1);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user