【问题标题】:show time left on cooldown显示剩余冷却时间
【发布时间】:2020-06-27 05:50:34
【问题描述】:

我希望显示冷却时间的剩余时间,但我不确定是否可以使用我目前拥有的格式来完成。可能吗?或者有没有更好的方法来使用冷却时间?我删掉了大部分与此相关的代码,因为它不相关。

let cooldown = new Set();
if(msgObject.content.startsWith("-eat")) {        

    let amount = Math.floor(Math.random() * 2500) + 1;
    let Channel = msgObject.channel.id

    if(Channel != `623195917083738136` && Channel != `623195981919289344` ){//bot test
        msgObject.channel.send('Cannot use command here, ' + msgObject.author)
            .then(msg => {
                (msg as Discord.Message).delete(20000)
                    .catch(console.error);
            })
        return;
    }

    if(cooldown.has(msgObject.author.id)){
        msgObject.channel.send(`You have to wait 3 hours to use this command again!`)
            .then(msg => {
                (msg as Discord.Message).delete(20000)
                    .catch(console.error);
            })
        return;
    }
    if(msgObject.content.startsWith("-eat")){
        cooldown.add(msgObject.author.id)

    }

    setTimeout(() => {
        cooldown.delete(msgObject.author.id)
    }, cdseconds * 1000);

    {let embed = new Discord.RichEmbed()

        .setAuthor(`${msgObject.author.tag}`, msgObject.author.displayAvatarURL) 

        .setDescription(`${msgObject.author}, ${(eat[index1])}${amount} DinoBucks`)

        .setColor("RANDOM");

        msgObject.channel.send(embed)
            .then(msg => {
                (msg as Discord.Message).delete(20000)
                    .catch(console.error);
            })  
        }      
    } 
}

【问题讨论】:

    标签: javascript typescript discord discord.js


    【解决方案1】:

    这在您当前的设置中是不可能的。但是,您可以使用类似what's on the Discord.js guide:

    // a collection of user ids to when (the timestamp) they used the command
    const timestamps = new Discord.Collection<string, number>();
    
    if (msgObject.content.startsWith("-eat")) {
        const now = Date.now();
        const cooldownAmount = cdseconds * 1000;
    
        if (timestamps.has(msgObject.author.id)) {
            const expirationTime = timestamps.get(msgObject.author.id) + cooldownAmount;
    
            if (now < expirationTime) {
                const timeLeft = (expirationTime - now) / 1000;
                return msgObject.reply(`You have to wait ${timeLeft.toFixed(1)} seconds to use this command again!`)
            }
        }
    
        // for v11:
        // const embed = new Discord.RichEmbed()
        const embed = new Discord.MessageEmbed()
            .setAuthor(`${msgObject.author.tag}`, msgObject.author.displayAvatarURL)
            // rest of command...
    
        timestamps.set(msgObject.author.id, now);
        setTimeout(() => timestamps.delete(msgObject.author.id), cooldownAmount);
    }
    

    为 Discord.js v13 更新。

    【讨论】:

      【解决方案2】:

      使用您的冷却时间定义格式,这是不可能的。我建议您为此使用discord.colletion,有一个很棒的example 实现。

      【讨论】:

        猜你喜欢
        • 2020-05-27
        • 2022-01-18
        • 2019-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-15
        • 2014-08-14
        • 2021-12-29
        相关资源
        最近更新 更多