Javascript discord.js上的冷却系统问题

Javascript discord.js上的冷却系统问题,javascript,discord.js,bots,Javascript,Discord.js,Bots,我对编码很陌生,我正在制作一个discord机器人,我想制作一个命令,让所有成员在再次使用它之前都需要等待一定的时间,但其中一些成员不需要等待相同的时间 例如:角色为X的成员等待20秒,角色为Y的成员等待10秒 问题是,我无法让它与名为人性化持续时间的npm包一起工作,以留出剩余时间。嵌入描述未显示正确的时间戳。也许是我弄错了 我试图解决的问题是什么 我试图阅读discord.js文档,人性化持续时间文档,但我无法修复它。而且,我没有发现任何错误。顺便说一下,我使用了一个命令处理程序 这是我用作

我对编码很陌生,我正在制作一个discord机器人,我想制作一个命令,让所有成员在再次使用它之前都需要等待一定的时间,但其中一些成员不需要等待相同的时间

例如:角色为X的成员等待20秒,角色为Y的成员等待10秒

问题是,我无法让它与名为
人性化持续时间的npm包一起工作,以留出剩余时间。嵌入描述未显示正确的时间戳。也许是我弄错了

我试图解决的问题是什么

我试图阅读discord.js文档,人性化持续时间文档,但我无法修复它。而且,我没有发现任何错误。顺便说一下,我使用了一个命令处理程序

这是我用作示例的代码(ping命令):

非常感谢您事先的帮助

问候。

问题#1:
冷却时间.has(message.author.id)和&member.roles.cache.has(“83050334525168298”)
不返回编号

问题#2:结果似乎返回了一个以毫秒为单位的数字,因此您需要使用正确的计算来计算剩余的时间(以毫秒为单位)。您可以使用
performance.now()
而不是
Date.now()

工作原理:

const {performance} = require('perf_hooks');
 
var start = performance.now();
// something happens
var end = performance.now();
var total = Math.floor(end - start) // returns time between each event
可能的解决方案:

const Discord = require("discord.js");
const humanizeDuration = require("humanize-duration");
const { performance } = require('perf_hooks');

let cooldown = new Set();

module.exports = {
    name: "ping",
    description: "It shows the bot latency.",

    execute(client, message, args) {

        let guild = client.guilds.cache.get("828376495969402901");
        var start = performance.now();
        let member = guild.members.cache.get(message.author.id);

        if (cooldown.has(message.author.id) && !member.roles.cache.has("830503345251680298")) {
            var end = performance.now();
            var total = Math.floor(end - start)
            const remaining = humanizeDuration(total, { units: ["s"], round: true, language: "en" });
            const cooldownEmbed = new Discord.MessageEmbed()
                .setTitle(`Slow down, bud`)
                .setDescription(`You can run \`ping\` again in **${remaining}**.\nThe default cooldown is \`20s\`, but boosters can only wait \`10s\`!`)
                .setColor(`RANDOM`);

            return message.channel.send(cooldownEmbed)
        }
    }
}

message.channel.send('Pinging...').then(message => {

    const embed = new Discord.MessageEmbed()
        .setDescription(`Pong! :ping_pong: \`${Date.now() - message.createdTimestamp} ms\``)
        .setColor(`RANDOM`);

    message.edit(" ", embed);
})

有几个错误。首先,
cooldown.has(message.author.id)
member.roles.cache.has(“83050334525160298”)
都返回布尔值。你不能用它来衡量剩余的时间

图像上显示的错误是因为您试图从布尔值(
!member.roles.cache.has(“83050334525168298”)
)中减去日期(
date.now()
),因此它返回自纪元时间以来的毫秒数。检查下面的代码段:

console.log(true-Date.now())

console.log(false-Date.now())
您好,感谢您迄今为止的帮助。不幸的是,它不起作用。您的代码帮助我以秒为单位创建时间戳,但它不会显示超过0秒的任何内容,正如此屏幕截图所示。亲切的问候。是的,它将是零,因为
结束
开始
之间有微小的差别。似乎“重罪123”误解了这个问题。您需要检查冷却到期之前的剩余时间,而不是开始运行命令的时间与代码检查冷却是否具有作者id的时间之间的差异。您好,Zsolt Meszaros。非常感谢你的帮助。关于代码,它给了我一个错误“Date.now不是构造函数”,然后我从中删除了“new”,即使它起作用,它仍然给了我“0秒”。也许我不应该用这个npm软件包?你好,问题已经解决了。非常感谢你到目前为止的帮助,Zsolt Meszaros和重罪123。亲切的问候。
const Discord = require("discord.js");
const humanizeDuration = require("humanize-duration");
const { performance } = require('perf_hooks');

let cooldown = new Set();

module.exports = {
    name: "ping",
    description: "It shows the bot latency.",

    execute(client, message, args) {

        let guild = client.guilds.cache.get("828376495969402901");
        var start = performance.now();
        let member = guild.members.cache.get(message.author.id);

        if (cooldown.has(message.author.id) && !member.roles.cache.has("830503345251680298")) {
            var end = performance.now();
            var total = Math.floor(end - start)
            const remaining = humanizeDuration(total, { units: ["s"], round: true, language: "en" });
            const cooldownEmbed = new Discord.MessageEmbed()
                .setTitle(`Slow down, bud`)
                .setDescription(`You can run \`ping\` again in **${remaining}**.\nThe default cooldown is \`20s\`, but boosters can only wait \`10s\`!`)
                .setColor(`RANDOM`);

            return message.channel.send(cooldownEmbed)
        }
    }
}

message.channel.send('Pinging...').then(message => {

    const embed = new Discord.MessageEmbed()
        .setDescription(`Pong! :ping_pong: \`${Date.now() - message.createdTimestamp} ms\``)
        .setColor(`RANDOM`);

    message.edit(" ", embed);
})