【问题标题】:Different cooldown length for different parts of a command命令不同部分的冷却时间不同
【发布时间】:2022-08-02 19:53:33
【问题描述】:

我有一个名为“work”的命令。该命令有 3 个部分,列出、应用和常规工作。当用户运行 -work list 时,将列出可用的作业,我不希望这部分有任何冷却时间。 -work apply 改变用户的工作,而 -work 只是生成随机数。所以,我希望当用户运行 -work apply 并改变他们的工作时,必须应用 1 天的冷却时间。当用户刚刚通过 - 工作时,我想要一个 1 小时的冷却时间。我想到命令的不同部分会返回不同的字符串,例如 work_apply 和 work_work,并使用该信息来应用不同的冷却时间。但这是不可能的,因为我不能在没有命令输出的情况下应用任何冷却,并且要获得一些输出,我必须运行命令。所以我不能在不运行它的情况下应用任何冷却。

    标签: discord.js rate-limiting


    【解决方案1】:

    我真的不知道你的命令处理程序是如何工作的,所以我会给你一个想法。

    您可以尝试制作地图并推送消息作者以及他们运行命令的时间。一旦你这样做了,下次同一个人在时间限制内运行代码时,设置它以便命令处理程序在地图中查找成员,如果他们找到它,他们检查他们上次运行命令的时间以及它是否在时间限制下,它返回函数

    再次我不知道你的命令处理程序是如何工作的,但我是这样做的

    PS。如果您的整个命令在 1 个文件中,那么我将显示的代码将不起作用。您应该尝试编辑代码的某些部分以使其符合您的喜好

    
    // command handler file
    
    const cooldowns = new Map();
    
    let name = command.name;
    
    if (!cooldowns.has(name)) {
    
        cooldowns.set(name, new Discord.Collection());
    
    }
    
    if (!message.member.roles.cache.has('ROLE_ID')) { // role that bypass cooldown
        
        const current_time = Date.now();
        const time_stamps = cooldowns.get(name);
        const cooldown_amount = (command.cooldown) * 1000;
        
        if (time_stamps.has(message.author.id)) {
        
            const expiration_time = time_stamps.get(message.author.id) + cooldown_amount;
        
            if (current_time < expiration_time) {
    
                message.reply({
    
                    content: `Please wait until the cooldown has ended`
    
                });
    
                return;
    
            }
    
        }
    
        time_stamps.set(message.author.id, current_time);
        setTimeout(() => time_stamps.delete(message.author.id), cooldown_amount);
    
    }
    
    
    
    // command file
    
    module.exports = {
    
        name: 'commandname',
        cooldown: 15 // this has to be in seconds | you can type '0' if there r no cooldowns
    
        async execute(YOUR PARAMETERS) {
    
            // command code
    
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-15
      • 2021-02-11
      • 2021-06-17
      • 1970-01-01
      • 2017-11-21
      • 2021-03-11
      • 2019-03-11
      • 2021-07-05
      相关资源
      最近更新 更多