Move ratelimiter to its own function
This commit is contained in:
parent
fcb7776f60
commit
afdbbee495
3 changed files with 52 additions and 59 deletions
|
@ -1,12 +1,12 @@
|
|||
import { PermissionFlagsBits, InteractionType } from 'discord.js';
|
||||
import db from '../../models/index.js';
|
||||
import ratelimiter from '../../utils/ratelimiter.js';
|
||||
|
||||
const { ownerId } = process.env;
|
||||
|
||||
export default {
|
||||
name: 'interactionCreate',
|
||||
async execute(interaction) {
|
||||
const ratelimit = global.ratelimit;
|
||||
const client = interaction.client;
|
||||
if (interaction.type !== InteractionType.ApplicationCommand) return;
|
||||
|
||||
|
@ -27,7 +27,7 @@ export default {
|
|||
|
||||
if (!command) return;
|
||||
|
||||
console.log(`\x1b[33m${userTag} (${userID})\x1b[0m launched command \x1b[33m${commandName}\x1b[0m`);
|
||||
console.log(`\x1b[33m${userTag} (${userID})\x1b[0m launched command \x1b[33m${commandName}\x1b[0m with slash`);
|
||||
|
||||
// Owner only check
|
||||
if (command.ownerOnly && interaction.user.id !== ownerId) {
|
||||
|
@ -51,35 +51,14 @@ export default {
|
|||
}
|
||||
*/
|
||||
|
||||
// Check the ratelimit
|
||||
const doRateLimit = ratelimiter.check(userID, commandName, command);
|
||||
if (doRateLimit) {
|
||||
return interaction.reply({ content: doRateLimit, ephemeral: true });
|
||||
|
||||
}
|
||||
|
||||
try {
|
||||
if (!ratelimit[userID]) {
|
||||
ratelimit[userID] = {};
|
||||
}
|
||||
|
||||
const date = new Date();
|
||||
if (ratelimit[userID][commandName]) {
|
||||
if (ratelimit[userID][commandName].cooldown) {
|
||||
if (date > ratelimit[userID][commandName].cooldown) {
|
||||
ratelimit[userID][commandName].limit = 0;
|
||||
ratelimit[userID][commandName].cooldown = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
if (command.ratelimit === ratelimit[userID][commandName].limit) {
|
||||
return await interaction.reply({ content: `You are being rate limited. You can try again in ${Math.floor((ratelimit[userID][commandName].cooldown - date) / 1000)} seconds.`, ephemeral: true });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (command.ratelimit) {
|
||||
ratelimit[userID][commandName] = { limit: ratelimit[userID][commandName] ? ratelimit[userID][commandName].limit + 1 : 1 };
|
||||
if (command.ratelimit === ratelimit[userID][commandName].limit) {
|
||||
date.setSeconds(date.getSeconds() + command.cooldown);
|
||||
|
||||
ratelimit[userID][commandName] = { limit: ratelimit[userID][commandName].limit, cooldown: date };
|
||||
}
|
||||
}
|
||||
|
||||
interaction.prefix = '/';
|
||||
|
||||
const args = {};
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
import { ApplicationCommandOptionType, EmbedBuilder, PermissionFlagsBits } from 'discord.js';
|
||||
import db from '../../models/index.js';
|
||||
import { rand } from '../../utils/rand.js';
|
||||
import ratelimiter from '../../utils/ratelimiter.js';
|
||||
|
||||
const { ownerId, prefix } = process.env;
|
||||
const prefixs = prefix.split(',');
|
||||
|
@ -289,7 +290,7 @@ export default {
|
|||
const userTag = message.author.tag;
|
||||
const userID = message.author.id;
|
||||
|
||||
console.log(`\x1b[33m${userTag} (${userID})\x1b[0m launched command \x1b[33m${commandName}\x1b[0m`);
|
||||
console.log(`\x1b[33m${userTag} (${userID})\x1b[0m launched command \x1b[33m${commandName}\x1b[0m with prefix`);
|
||||
|
||||
// Owner only check
|
||||
if (command.ownerOnly && message.author.id !== ownerId) {
|
||||
|
@ -311,35 +312,14 @@ export default {
|
|||
}
|
||||
}
|
||||
|
||||
// Check the ratelimit
|
||||
const doRateLimit = ratelimiter.check(userID, commandName, command);
|
||||
if (doRateLimit) {
|
||||
return message.reply({ content: doRateLimit, ephemeral: true });
|
||||
|
||||
}
|
||||
|
||||
try {
|
||||
const ratelimit = global.ratelimit;
|
||||
if (!ratelimit[userID]) {
|
||||
ratelimit[userID] = {};
|
||||
}
|
||||
|
||||
const date = new Date();
|
||||
if (ratelimit[userID][commandName]) {
|
||||
if (ratelimit[userID][commandName].cooldown) {
|
||||
if (date > ratelimit[userID][commandName].cooldown) {
|
||||
ratelimit[userID][commandName].limit = 0;
|
||||
ratelimit[userID][commandName].cooldown = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
if (command.ratelimit === ratelimit[userID][commandName].limit) {
|
||||
return await message.reply({ content: `You are being rate limited. You can try again in ${Math.floor((ratelimit[userID][commandName].cooldown - date) / 1000)}huh seconds.`, ephemeral: true });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (command.ratelimit) {
|
||||
ratelimit[userID][commandName] = { limit: ratelimit[userID][commandName] ? ratelimit[userID][commandName].limit + 1 : 1 };
|
||||
if (command.ratelimit === ratelimit[userID][commandName].limit) {
|
||||
date.setSeconds(date.getSeconds() + command.cooldown);
|
||||
|
||||
ratelimit[userID][commandName] = { limit: ratelimit[userID][commandName].limit, cooldown: date };
|
||||
}
|
||||
}
|
||||
message.user = message.author;
|
||||
message.isMessage = true;
|
||||
message.prefix = `${messageArray[0]} `;
|
||||
|
|
34
utils/ratelimiter.js
Normal file
34
utils/ratelimiter.js
Normal file
|
@ -0,0 +1,34 @@
|
|||
export default {
|
||||
check,
|
||||
};
|
||||
function check(userID, commandName, commands) {
|
||||
const ratelimit = global.ratelimit;
|
||||
if (!ratelimit[userID]) {
|
||||
ratelimit[userID] = {};
|
||||
}
|
||||
|
||||
const date = new Date();
|
||||
if (ratelimit[userID][commandName]) {
|
||||
if (ratelimit[userID][commandName].cooldown) {
|
||||
if (date > ratelimit[userID][commandName].cooldown) {
|
||||
ratelimit[userID][commandName].limit = 0;
|
||||
ratelimit[userID][commandName].cooldown = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
if (commands.ratelimit === ratelimit[userID][commandName].limit) {
|
||||
return `You are being rate limited. You can try again in ${Math.floor((ratelimit[userID][commandName].cooldown - date) / 1000)} seconds.`;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (commands.ratelimit) {
|
||||
ratelimit[userID][commandName] = { limit: ratelimit[userID][commandName] ? ratelimit[userID][commandName].limit + 1 : 1 };
|
||||
if (commands.ratelimit === ratelimit[userID][commandName].limit) {
|
||||
date.setSeconds(date.getSeconds() + commands.cooldown);
|
||||
|
||||
ratelimit[userID][commandName] = { limit: ratelimit[userID][commandName].limit, cooldown: date };
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
Loading…
Reference in a new issue