我一直在尝试为我的禁令命令添加一个命令冷却时间,但到目前为止我尝试过的一切都没有奏效。到目前为止,我正在使用 quick.db 来记录用户冷却时间结束的时间,因为即使机器人停机,冷却时间仍然有效。我尝试了其他可行的方法,但我已经使用了 quick.db,所以我觉得它更容易。我遇到的主要问题是冷却时间没有生效,用户仍然可以照常运行命令。代码如下:
const convertToMS = require('../lib/convertTime');
const embedStruc = require('../lib/embedStructure');
const e = require('../embeds.json');
const consola = require("consola");
const db = require("quick.db");
const talkedRecently = new Set();
const validateUser = (guild, id) => {
let userID = id;
if (userID.indexOf('<@!') > -1) {
userID = userID.split('<@!')[1];
userID = userID.slice(0, -1)
} else if (userID.indexOf('<@') > -1) {
userID = userID.split('<@')[1];
userID = userID.slice(0, -1)
}
const actualMember = guild.members.cache.get(userID);
if (!actualMember) return false;
return actualMember.id;
}
let cooldown = 43200000;
module.exports = {
name: 'ban',
description: 'Bans a user',
alias: [],
async execute(message, args, client, prefix, logsChannel) {
let bancooldown = await db.fetch(`daily_${message.author.id}`);
if (bancooldown !== null && cooldown - (Date.now() - bancooldown) > 0) {
let timeObj = ms(cooldown - (Date.now() - bancooldown));
} else {
if(!message.member.hasPermission("ADMINISTRATOR")) return;
if (args.length === 0) {
return message.channel.send(
new MessageEmbed()
.setColor(e.red)
.setDescription(
`:x: **Invalid Arguments**\n` +
`\`${prefix}ban [@mention/user id] (reason)\``
)
).catch();
}
}
let punishedUser = validateUser(message.guild, args[0]);
if (!punishedUser) {
return message.channel.send(
new MessageEmbed()
.setColor(e.red)
.setDescription(
`:x: **Invalid User**`
)
).catch();
}
let reason = 'No reason provided';
if (args.length > 1) {
let tempArgs = args.join(' ').split(' ');
await tempArgs.shift();
await tempArgs.shift();
reason = tempArgs.join(' ');
}
const bannedUser = message.guild.members.cache.get(punishedUser);
const banID = db.add(`${message.guild.id}.base`, 1).base;
if (!bannedUser.bannable) {
return message.channel.send(
new MessageEmbed()
.setColor(e.red)
.setDescription(`:x: Unable to ban <@!${bannedUser.id}>.`)
);
}
await bannedUser.send(
embedStruc.userBan(
reason,
message.guild.name,
banID
)
).catch(() => {});
await bannedUser.kick(`Banned for "${reason}" by ${message.author.tag}`)
.catch(() => {
return message.channel.send(
new MessageEmbed()
.setColor(e.red)
.setDescription(`:x: Unable to ban <@!${bannedUser.id}>.`)
);
});
message.channel.send(
new MessageEmbed()
.setColor(e.default)
.setDescription(
`:scream: <@!${bannedUser.id}> was banned.`
)
).catch();
logsChannel.send(
embedStruc.logsBan(
bannedUser.id,
message.author.id,
reason,
Date.now(),
banID
)
).catch();
db.set(`${message.guild.id}.punishments.${banID}`, {
user: bannedUser.id,
moderator: message.author.id,
reason,
time: Date.now(),
ID: banID,
type: "BAN"
});
db.push(`${message.guild.id}.${bannedUser.id}.punishments`, banID);
},
};