【问题标题】:Discord.js command cooldowns with ms and quick.db使用 ms 和 quick.db 的 Discord.js 命令冷却时间
【发布时间】:2022-01-07 19:03:54
【问题描述】:

我想在 /rep 命令上设置冷却时间。但我有问题。当用户使用命令时,冷却时间是正确的。但是当用户第二次运行命令时,第二次冷却时间是错误的,是52年,但必须是12小时。为什么?有我的代码。我为测试设置了 15 秒的冷却时间,但它显示从第二个冷却时间及以后的 52 年。没有任何错误和控制台。 Discord.js v13 和 pretty-ms v7.0.1

const { SlashCommandBuilder } = require("@discordjs/builders");
const { MessageEmbed } = require("discord.js");
const db = require("quick.db");
const ms = require("pretty-ms");
const yaml = require('js-yaml');
const fs = require("fs");
const lang = yaml.load(fs.readFileSync('lang.yml', 'utf8'));

module.exports = {
    data: new SlashCommandBuilder()
        .setName('rep')
        .setDescription(lang.rep.cmdDesc)
        .addUserOption(option =>
            option.setName('user')
                .setDescription(lang.rep.optionDesc)
                .setRequired(true)),
    async execute(interaction) {
        let lastDaily = await db.fetch(`repCheck_${interaction.user.id}`);
        const cooldown = 15000;
        
        if (lastDaily !== null && cooldown - (Date.now() - lastDaily) > 0) {
            const timeLeftRep = ms(cooldown - (Date.now() - lastDaily))
            const timerr = new MessageEmbed()
            .setDescription(lang.rep.cooldownErr.replace('{{cooldownRep}}', timeLeftRep))
            .setColor('RED')
            await interaction.reply({ embeds: [timerr], ephemeral: true })
        } else if (interaction.options.getUser('user').bot) {
            const boterr = new MessageEmbed()
            .setDescription(lang.rep.mentionErr)
            .setColor('RED')
            await interaction.reply({ embeds: [boterr], ephemeral: true });
        } else if (interaction.options.getUser('user').id == interaction.user.id) {
            const selfmen = new MessageEmbed()
            .setDescription(lang.rep.selfMention)
            .setColor('RED')
            await interaction.reply({ embeds: [selfmen], ephemeral: true })
        } else {
            const member = interaction.options.getUser('user').id;
            let reputation = db.fetch(`rep_${member}`)
            db.add(`rep_${member}`, 1)
            const repembed = new MessageEmbed()
            .setDescription(lang.rep.successMsg.replace('{{user}}', interaction.options.getUser('user').username))
            await interaction.reply({embeds: [repembed]});
            db.add(`repCheck_${interaction.user.id}`, Date.now())
        }
    }
}

【问题讨论】:

    标签: javascript discord.js quick.db


    【解决方案1】:

    因为我无法评论。这可能是因为您在代码中输入了db.add() 而不是db.set()。它会将您最后的冷却时间与您刚刚设置的当前冷却时间相加。这会使它更长。您可以尝试更改您的代码:

    来自

    db.add(`repCheck_${interaction.user.id}`, Date.now());
    

    db.set(`repCheck_${interaction.user.id}`, Date.now());
    

    它可能有效,如果无效,请告诉我。

    【讨论】:

      猜你喜欢
      • 2021-06-17
      • 2021-02-16
      • 2021-05-20
      • 2020-05-27
      • 2021-02-11
      • 1970-01-01
      • 2021-10-10
      • 2017-11-21
      • 2021-03-11
      相关资源
      最近更新 更多