From 5ca044b735bde5d68b77f82b4ea4f5a3249f23ee Mon Sep 17 00:00:00 2001 From: baz Date: Sat, 18 Nov 2023 20:26:54 +0000 Subject: [PATCH] Add support for command cooldowns --- events/interactionCreate.js | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/events/interactionCreate.js b/events/interactionCreate.js index 9fa876b..4859005 100644 --- a/events/interactionCreate.js +++ b/events/interactionCreate.js @@ -1,4 +1,4 @@ -const { Events } = require('discord.js'); +const { Events, Collection } = require('discord.js'); module.exports = { name: Events.InteractionCreate, @@ -14,6 +14,29 @@ module.exports = { return; } + const { cooldowns } = interaction.client; + + if (!cooldowns.has(command.data.name)) { + cooldowns.set(command.data.name, new Collection()); + } + + const now = Date.now(); + const timestamps = cooldowns.get(command.data.name); + const defaultCooldownDuration = 3; + const cooldownAmount = (command.cooldown ?? defaultCooldownDuration) * 1000; + + if (timestamps.has(interaction.user.id)) { + const expirationTime = timestamps.get(interaction.user.id) + cooldownAmount; + + if (now < expirationTime) { + const expiredTimestamp = Math.round(expirationTime / 1000); + return interaction.reply({ content: `Please wait, you are on a cooldown for \`${command.data.name}\`. You can use it again .`, ephemeral: true }); + } + } + + timestamps.set(interaction.user.id, now); + setTimeout(() => timestamps.delete(interaction.user.id), cooldownAmount); + try { await command.execute(interaction); } catch (error) {