0

我一直在尝试为我的禁令命令添加命令冷却时间,但到目前为止我尝试过的一切都没有奏效。到目前为止,我正在使用 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);
    },
};
4

0 回答 0