diff --git a/events/client/interactionCreate.js b/events/client/interactionCreate.js index 117be13..464f2e8 100644 --- a/events/client/interactionCreate.js +++ b/events/client/interactionCreate.js @@ -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 = {}; diff --git a/events/client/messageCreate.js b/events/client/messageCreate.js index f0236ad..9ae4920 100644 --- a/events/client/messageCreate.js +++ b/events/client/messageCreate.js @@ -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]} `; diff --git a/utils/ratelimiter.js b/utils/ratelimiter.js new file mode 100644 index 0000000..fc5ee95 --- /dev/null +++ b/utils/ratelimiter.js @@ -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; +}