first commit
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
class RateLimit{
|
||||
constructor(maxRequests, timeFrame){
|
||||
this.maxRequests = maxRequests;
|
||||
this.timeFrame = timeFrame;
|
||||
this.users = {};
|
||||
}
|
||||
|
||||
async addUser(user){
|
||||
this.users[user] = {
|
||||
requests: this.maxRequests,
|
||||
lastRequest: Date.now()
|
||||
};
|
||||
}
|
||||
|
||||
async removeUser(user){
|
||||
delete this.users[user];
|
||||
}
|
||||
|
||||
async checkUser(user){
|
||||
if(!this.users[user]) await this.addUser(user);
|
||||
return this.users[user];
|
||||
}
|
||||
|
||||
async checkRateLimit(user){
|
||||
const { requests, lastRequest } = await this.checkUser(user);
|
||||
const now = Date.now();
|
||||
if(now - lastRequest > this.timeFrame) {
|
||||
this.users[user].requests = this.maxRequests;
|
||||
this.users[user].lastRequest = now;
|
||||
return true;
|
||||
}
|
||||
if(requests > 0) {
|
||||
this.users[user].requests--;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
async getRateLimit(user){
|
||||
const { requests, lastRequest } = await this.checkUser(user);
|
||||
const now = Date.now();
|
||||
if(now - lastRequest > this.timeFrame) {
|
||||
this.users[user].requests = this.maxRequests;
|
||||
this.users[user].lastRequest = now;
|
||||
return this.maxRequests;
|
||||
}
|
||||
return requests;
|
||||
}
|
||||
|
||||
async getRateLimitReset(user){
|
||||
const { requests, lastRequest } = await this.checkUser(user);
|
||||
const now = Date.now();
|
||||
if(now - lastRequest > this.timeFrame) {
|
||||
this.users[user].requests = this.maxRequests;
|
||||
this.users[user].lastRequest = now;
|
||||
return this.timeFrame;
|
||||
}
|
||||
return this.timeFrame - (now - lastRequest);
|
||||
}
|
||||
|
||||
async getRateLimitRemaining(user){
|
||||
const { requests, lastRequest } = await this.checkUser(user);
|
||||
const now = Date.now();
|
||||
if(now - lastRequest > this.timeFrame) {
|
||||
this.users[user].requests = this.maxRequests;
|
||||
this.users[user].lastRequest = now;
|
||||
return this.maxRequests;
|
||||
}
|
||||
return requests;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = RateLimit;
|
||||
Reference in New Issue
Block a user