Discord.js - Cooldown for a command for each user not all users

前端 未结 2 1466
心在旅途
心在旅途 2020-12-19 19:39

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 a

相关标签:
2条回答
  • 2020-12-19 20:02

    Yes it is easy and possible.

    Add this at the top of your JS file:

    // First, this must be at the top level of your code, **NOT** in any event!
    const talkedRecently = new Set();
    

    Now in the command event add this:

        if (talkedRecently.has(msg.author.id)) {
                msg.channel.send("Wait 1 minute before getting typing this again. - " + msg.author);
        } else {
    
               // the user can type the command ... your command code goes here :)
    
            // Adds the user to the set so that they can't talk for a minute
            talkedRecently.add(msg.author.id);
            setTimeout(() => {
              // Removes the user from the set after a minute
              talkedRecently.delete(msg.author.id);
            }, 60000);
        }
    
    0 讨论(0)
  • 2020-12-19 20:03

    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
      }
    
    0 讨论(0)
提交回复
热议问题