'Discord.js - Cooldown for a command for each user not all users
I am developing a discord.js bot and I want to make a cooldown for a command.
I saw a lot of tutorials on how to do it on Google, but all those tutorials do it for all the commands (so when a user type !mycmd all the users have to wait X minutes/seconds until it can be typed again).
But I want to do it for each user (when a user type !mycmd , ONLY this user have to wait X minutes/seconds until THE USER can type it again).
Is it possible?
Thanks!
Solution 1:[1]
You can use the package quick.db in case you want to keep track of cooldowns, even after a restart.
let cooldown = 43200000; // 12 hours in ms
let lastDaily = await db.fetch(`daily_${message.author.id}`);
if (lastDaily !== null && cooldown - (Date.now() - lastDaily) > 0) {
// If user still has a cooldown
let timeObj = ms(cooldown - (Date.now() - lastDaily)); // timeObj.hours = 12
} else {
// Otherwise they'll get their daily
}
Solution 2:[2]
You can use wokcommands or discord.js-commando they're a very useful package for easy command and event handling. It has a built-in cooldown which you can use. A per user cooldown and a global cooldown. Also, commando has throttling, like rate-limiting. It's like allowing a user to use the command 4 times or whatever you input and after that the cooldown will execute.
In case you want to keep track on your cooldown when the bot restarts, Wokcommands supports mongodb and has a built in collection for cooldown.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Crist |
| Solution 2 | Kayne Cover |
