Discord.js 毫秒命令冷却时间和 quick.db
Discord.js command cooldowns with ms and quick.db
我想为 /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())
}
}
}
因为我无法发表评论。这可能是因为您在代码中放置了 db.add()
而不是 db.set()
。它会将您上次的冷却时间与您刚刚设置的当前冷却时间相加。这将使它更长。您可以尝试更改您的代码:
来自
db.add(`repCheck_${interaction.user.id}`, Date.now());
到
db.set(`repCheck_${interaction.user.id}`, Date.now());
它可能有用,如果不行请告诉我。
我想为 /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())
}
}
}
因为我无法发表评论。这可能是因为您在代码中放置了 db.add()
而不是 db.set()
。它会将您上次的冷却时间与您刚刚设置的当前冷却时间相加。这将使它更长。您可以尝试更改您的代码:
来自
db.add(`repCheck_${interaction.user.id}`, Date.now());
到
db.set(`repCheck_${interaction.user.id}`, Date.now());
它可能有用,如果不行请告诉我。