Как правильно использовать псевдонимы в Discord? - PullRequest
0 голосов
/ 20 апреля 2020
module.exports.config = {
    name: "av",
    aliases: ["icon", "pfp"]
};

index основной файл:

bot.commands = new Discord.Collection();
bot.aliases = new Discord.Collection();
fs.readdir("./commands/general", (err, files) => {

    if (err) console.log(err);

    let jsfile = files.filter(f => f.split(".").pop() === "js");
    if (jsfile.length <= 0) {
        console.log("Couldn't find the general commands.");
        return;
    }
    jsfile.forEach((f, i) => {
        let props = require(`./commands/general/${f}`);
        console.log(`${f} loaded!`);
        bot.commands.set(props.config.name, props);
        bot.aliases.set(props.config.name);
    });
});

В сообщении

const command = bot.commands.get(commandName) || bot.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName));

примечание: все команды работают очень хорошо, но много раз пытались исправить псевдонимы, используя разные способы.

1 Ответ

0 голосов
/ 26 апреля 2020

У вас есть две коллекции, вы также не устанавливаете никакого значения для bot.aliases, и ключ по-прежнему props.config.name, вы можете придерживаться двух коллекций, но нет практического использования, и это только ухудшает код

, так что избавьтесь от коллекции псевдонимов и bot.aliases.set(props.config.name)

Далее, что является фактическим свойством функции? бесполезно для него быть на объекте конфигурации, если у вас есть там в настоящее время.

При условии, что ваш макет теперь

module.exports.run = () => { /* function, doesnt have to be run */ }
module.exports.config = {
};

код в основном файле

jsfile.forEach(f => {
    let props = require(`./commands/general/${f}`);
    console.log(`${f} loaded!`);
    bot.commands.set(props.config.name, { 
        run: props.run,
        ...props.config
    });
});

код на чеке

const command = bot.commands.get(commandName) || bot.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName));

//to actually run it you would need to do
command.run();
...