Discord.js | Время восстановления команды установлено, но не работает

#javascript #discord #discord.js

Вопрос:

Так что message.js где происходит перезарядка и help.js это команда, help команда в настоящее время установлена на 60 seconds , как вы можете видеть на cooldown , но независимо от того, что я там ввожу, она не работает и по-прежнему установлена менее чем 1 на секунду, я думаю, для вывода, пожалуйста, проверьте GIF включенный в этот вопрос.

введите описание изображения здесь

message.js:

 const Discord = require("discord.js");
const settings = require("../../config/settings.json");

const cooldowns = new Discord.Collection();

module.exports = async (client, message) => {
    if (message.author.bot) return;
    const prefixesdatabase = client.settings.ensure(message.guild.id, settings);

    if (!client.settings.get(message.guild.id, "prefix")) {
        client.settings.set(message.guild.id, {
            prefix: settings.prefix
        });
    }

    if (message.content.match(new RegExp(`^<@!?${client.user.id}>( |)
 #javascript #discord #discord.js



Вопрос:

Так что message.js где происходит перезарядка и help.js это команда, help команда в настоящее время установлена на 60 seconds , как вы можете видеть на cooldown , но независимо от того, что я там ввожу, она не работает и по-прежнему установлена менее чем 1 на секунду, я думаю, для вывода, пожалуйста, проверьте GIF включенный в этот вопрос. введите описание изображения здесь message.js: ))) { message.reply(`my prefix is: `${prefixesdatabase.prefix}``); } if (!message.content.startsWith(prefixesdatabase.prefix)) return; const command = message.content .split(" ")[0] .slice(prefixesdatabase.prefix.length); const args = message.content.split(" ").slice(1); if (!cooldowns.has(command.name)) { cooldowns.set(command.name, new Discord.Collection()); } const now = Date.now(); const timestamps = cooldowns.get(command.name); const cooldownAmount = (command.cooldown || 2) * 1000; if (timestamps.has(message.author.id)) { const expirationTime = timestamps.get(message.author.id) cooldownAmount; if (now < expirationTime) { const timeLeft = (expirationTime - now) / 2000; return message.reply( `Before using **${ prefixesdatabase.prefix }${command}**, please wait for **${timeLeft.toFixed( 1 )} second for cooldowns!**` ); } } timestamps.set(message.author.id, now); setTimeout(() => timestamps.delete(message.author.id), cooldownAmount); let cmd; if (client.commands.has(command)) { cmd = client.commands.get(command); } else if (client.aliases.has(command)) { cmd = client.commands.get(client.aliases.get(command)); } try { cmd.run(client, message, args); } catch (e) { return console.log(`Invalid command: ${command}`); } finally { console.log( `${message.author.username} using command ${prefixesdatabase.prefix}${command}` ); } };

help.js

 const Discord = require("discord.js");

module.exports.run = async (client, message, args) => {
    const settings = require("../../config/settings.json");
    const prefixesdatabase = client.settings.ensure(message.guild.id, settings);

    const helpArray = message.content.split(" ");
    const helpArgs = helpArray.slice(1);

    if (!helpArgs[0]) {
        const embed = new Discord.MessageEmbed()
            .setColor("#b491c8")
            .setDescription(
                `**My prefix:** `${prefixesdatabase.prefix}` , Slash Commands list for `/help`nClick [HERE](https://discord.com/api/oauth2/authorize?client_id=${client.user.id}amp;permissions=8amp;scope=bot applications.commands) to invite me to your server.`
            )
            .addField("**:gear: Basic**", "`help`, `ping`, `vote`, `uptime`, `setprefix`")
            .addField(
                "**🛠️ Moderation**",
                "`ban`, `clear`, `clearwarn`, `createchannel`, `createemoji`, `kick`, `lockchannel`, `mute`, `rename`, `slowmode`, `unban`, `unlockchannel`, `unmute`, `warn`, `warnings`"
            )           
            .addField(
                "**⚙ Utility**",
                "`aes256`, `avatar`, `channel`, `embed`, `roleinfo`, `reverse`, `setafk`, `snipe`, `stats`, `timer`, `translate`, `whois`, `weather`, `youtube`"
            )
            .addField(
                "**:magic_wand: Pruning**",
                "`urole`, `unorole`, `krole`, `knorole`, `fetch`"
            )           
            .addField(
                "**:tada: Giveaways**",
                "`start-giveaway`, `reroll`, `end-giveaway`"
            )
            .addField(
                "**:frame_photo: Images**",
                "`captcha`, `circle`, `delete`, `gay`, `changemymind`, `trigger`, `clyde`, `petpet`, `magik`, `iphonex`"
            )
            .addField(
                "**:musical_note: Music**",
                "`play`, `stop`, `skip`, `queue`, `autoplay`, `loop`, `volume`, `pause`, `resume`"
            )
            .addField(
                "**:partying_face: Fun**",
                "`8ball`, `cat`, `deaes256`, `kiss`, `meme`, `ngif`, `pat`, `poke`, `smug`, `thigh`, `tickle`"
            )           
            .addFields(
                { name: ':desktop: Github (Source Code)', value: 'https://github.com/mashwishi/PruneBot' },
                { name: ':revolving_hearts: Support the Developer:', value: 'https://ko-fi.com/mashwishi' }   
              )         
            .setTitle('Prune Bot | Commands')
            .setFooter(`©${nowyear} ${client.user.username} Created by Mashwishi.nCommand requested by: ${message.author.username}#${message.author.discriminator}`, `https://i.imgur.com/ypxq7B9.png`)
            .setThumbnail('https://i.imgur.com/ypxq7B9.png')    
            .setAuthor('Join our Discord Server', 'https://i.imgur.com/hKeHeEy.gif', 'https://discord.io/LIMYAW');
        message.channel.send({ embed });
    }

    if (helpArgs[0]) {
        let command = helpArgs[0];

        if (client.commands.has(command)) {
            command = client.commands.get(command);
            let alia = command.help.aliases;
            if (command.help.aliases < 1) alia = "No aliases";

            const embed = new Discord.MessageEmbed()
                .setAuthor(
                    `Command: ${command.help.name}`,
                    client.user.displayAvatarURL()
                )
                .setDescription(
                    `
            **Description:**n```${
                            command.help.description ||
                            "There is no Description for this command."
                        }```n**Usage:**n```${
                        command.help.usage || "No Usage"
                    }```n**Permissions:**n```${
                        command.help.accessableby || "Members"
                    }```n**Cooldown (in seconds):**n```${
                        command.help.cooldown || "No Cooldown"
                    }```n**Aliases:**n```${alia}````
                    
                )
                .setColor("#4a4b4d")
                .setFooter(
                    `© ${nowyear} ${client.user.username} | This command requested by ${message.author.username}#${message.author.discriminator}`
                );

            message.channel.send(embed);
        } else {
            const embeds = new Discord.MessageEmbed()
                .setDescription(`${emojis.cross} Command is not found!`)
                .setColor("RED");

            return message.channel.send(embeds);
        }
    }
};

module.exports.help = {
    name: "help",
    description: "This command is used for displaying all commands.",
    usage: "p!help",
    accessableby: "Members",
    aliases: ['?', 'commands', 'command'],
    cooldown: 60
};

 

Комментарии:

1. Где вы используете / назначаете help информацию о команде, которую вы экспортируете внутри своего help.js ? Если message это экземпляр Message , то message.content это а String , и поэтому ваш command .

2. у меня есть command.js файл pastebin.com/0GXWj0Np

Ответ №1:

Внутри вашего message.js , вы, вероятно, перепутали command с экспортированным командным объектом ( help.js например, из). Используйте лучшее именование переменных, например commandText , чтобы было ясно, что это текст/строка.

Ваш объект команды-это объект cmd , который вы используете для выполнения команды с помощью экспортированной функции .run() . cmd Также содержит .help свойство, которое обладает .cooldown нужным вам свойством.

Вот посмотрите на простой пример, как бы я справился с этой проблемой.

 // ... Somewhere in the code (probably index.js or main.js) ...

client.commands = new Map();
client.aliases = new Map();

// ... Inside of your command handler (command.js) ...

// The command variable defined as a require of command file (for example help.js)

client.commands.set(command.help.name, command);
command.help.aliases.forEach(alias => {
    client.aliases.set(alias, command.help.name);
});

// ... Inside of your message handler (message.js) ...

let commandText = message.content.split(" ")[0].slice(prefixesdatabase.prefix.length);
if (!client.commands.has(commandText)) {
    commandText = client.aliases.get(commandText);
    if (!commandText) return;
}

const command = client.commands.get(commandText);
const cooldownAmount = (command.help.cooldown || 2) * 1000;

// ... Rest of your code ...
 

Обратите внимание , что мы используем command.help.cooldown не command.cooldown или command.name и т. Д. Потому что сам экспортируемый объект не обладает такими свойствами. Вы добавили свойство .help к экспортируемому объекту с помощью module.exports.help = { ... } , которое содержит name и cooldown и т. Д.

Чтобы внедрить мое решение в ваш код, вам нужно заменить следующее (внутри message.js ):

 // ... Rest of your code ...

if (!message.content.startsWith(prefixesdatabase.prefix)) return;

let commandText = message.content.split(" ")[0].slice(prefixesdatabase.prefix.length);
if (!client.commands.has(commandText)) {
    commandText = client.aliases.get(commandText);
    if (!commandText) return;
}

const command = client.commands.get(commandText);
const args = message.content.split(" ").slice(1);

if (!cooldowns.has(command.help.name)) {
    cooldowns.set(command.help.name, new Discord.Collection());
}

const now = Date.now();
const timestamps = cooldowns.get(command.help.name);
const cooldownAmount = (command.help.cooldown || 2) * 1000;
if (timestamps.has(message.author.id)) {
    const expirationTime = timestamps.get(message.author.id)   cooldownAmount;
    if (now < expirationTime) {
        const timeLeft = (expirationTime - now) / 1000;
        return message.reply(
            `Before using **${
                prefixesdatabase.prefix
            }${commandText}**, please wait for **${timeLeft.toFixed(
                1
            )} second for cooldowns!**`
        );
    }
}

timestamps.set(message.author.id, now);
setTimeout(() => timestamps.delete(message.author.id), cooldownAmount);

try {
    command.run(client, message, args);
} catch (e) {
    return console.log(`Invalid command: ${commandText}`);
} finally {
    console.log(
        `${message.author.username} using command ${prefixesdatabase.prefix}${commandText}`
    );
}
 

Результат:

введите описание изображения здесь

Комментарии:

1. Можете ли вы помочь мне применить его, я пытался применить то, что вижу из блока кода, но это не работает.

2. Вы можете отправить запрос в мой проект на github под названием PruneBot . message.js на event/client/message.js и help.js на command/info/help.js .

3. У меня уже есть это в command.js command.help.aliases.forEach(alias => { client.aliases.set(alias, command.help.name); });

4. @Mashwishi Я обновил свой ответ, вы можете взглянуть на это. 🙂

Ответ №2:

В help.js у вас cooldown внутри module.exports.help нет module.exports

Вы либо переводите его в нормальное module.exports состояние, либо меняете message.js от

 const cooldownAmount = (command.cooldown || 2) * 1000;
 

Для

 const cooldownAmount = (command.help.cooldown || 2) * 1000;
 

То, что я сказал о переходе module.exports.help на module.exports я имел в виду это:

help.js

 const Discord = require("discord.js");

module.exports.run = async (client, message, args) => {
    const settings = require("../../config/settings.json");
    const prefixesdatabase = client.settings.ensure(message.guild.id, settings);

    const helpArray = message.content.split(" ");
    const helpArgs = helpArray.slice(1);

    if (!helpArgs[0]) {
        const embed = new Discord.MessageEmbed()
            .setColor("#b491c8")
            .setDescription(
                `**My prefix:** `${prefixesdatabase.prefix}` , Slash Commands list for `/help`nClick [HERE](https://discord.com/api/oauth2/authorize?client_id=${client.user.id}amp;permissions=8amp;scope=bot applications.commands) to invite me to your server.`
            )
            .addField("**:gear: Basic**", "`help`, `ping`, `vote`, `uptime`, `setprefix`")
            .addField(
                "**🛠️ Moderation**",
                "`ban`, `clear`, `clearwarn`, `createchannel`, `createemoji`, `kick`, `lockchannel`, `mute`, `rename`, `slowmode`, `unban`, `unlockchannel`, `unmute`, `warn`, `warnings`"
            )           
            .addField(
                "**⚙ Utility**",
                "`aes256`, `avatar`, `channel`, `embed`, `roleinfo`, `reverse`, `setafk`, `snipe`, `stats`, `timer`, `translate`, `whois`, `weather`, `youtube`"
            )
            .addField(
                "**:magic_wand: Pruning**",
                "`urole`, `unorole`, `krole`, `knorole`, `fetch`"
            )           
            .addField(
                "**:tada: Giveaways**",
                "`start-giveaway`, `reroll`, `end-giveaway`"
            )
            .addField(
                "**:frame_photo: Images**",
                "`captcha`, `circle`, `delete`, `gay`, `changemymind`, `trigger`, `clyde`, `petpet`, `magik`, `iphonex`"
            )
            .addField(
                "**:musical_note: Music**",
                "`play`, `stop`, `skip`, `queue`, `autoplay`, `loop`, `volume`, `pause`, `resume`"
            )
            .addField(
                "**:partying_face: Fun**",
                "`8ball`, `cat`, `deaes256`, `kiss`, `meme`, `ngif`, `pat`, `poke`, `smug`, `thigh`, `tickle`"
            )           
            .addFields(
                { name: ':desktop: Github (Source Code)', value: 'https://github.com/mashwishi/PruneBot' },
                { name: ':revolving_hearts: Support the Developer:', value: 'https://ko-fi.com/mashwishi' }   
              )         
            .setTitle('Prune Bot | Commands')
            .setFooter(`©${nowyear} ${client.user.username} Created by Mashwishi.nCommand requested by: ${message.author.username}#${message.author.discriminator}`, `https://i.imgur.com/ypxq7B9.png`)
            .setThumbnail('https://i.imgur.com/ypxq7B9.png')    
            .setAuthor('Join our Discord Server', 'https://i.imgur.com/hKeHeEy.gif', 'https://discord.io/LIMYAW');
        message.channel.send({ embed });
    }

    if (helpArgs[0]) {
        let command = helpArgs[0];

        if (client.commands.has(command)) {
            command = client.commands.get(command);
            let alia = command.aliases;
            if (command.aliases < 1) alia = "No aliases";

            const embed = new Discord.MessageEmbed()
                .setAuthor(
                    `Command: ${command.name}`,
                    client.user.displayAvatarURL()
                )
                .setDescription(
                    `
            **Description:**n```${
                            command.description ||
                            "There is no Description for this command."
                        }```n**Usage:**n```${
                        command.usage || "No Usage"
                    }```n**Permissions:**n```${
                        command.accessableby || "Members"
                    }```n**Cooldown (in seconds):**n```${
                        command.cooldown || "No Cooldown"
                    }```n**Aliases:**n```${alia}````
                    
                )
                .setColor("#4a4b4d")
                .setFooter(
                    `© ${nowyear} ${client.user.username} | This command requested by ${message.author.username}#${message.author.discriminator}`
                );

            message.channel.send(embed);
        } else {
            const embeds = new Discord.MessageEmbed()
                .setDescription(`${emojis.cross} Command is not found!`)
                .setColor("RED");

            return message.channel.send(embeds);
        }
    }
};

module.exports = {
    name: "help",
    description: "This command is used for displaying all commands.",
    usage: "p!help",
    accessableby: "Members",
    aliases: ['?', 'commands', 'command'],
    cooldown: 60
};