Discord机器人:命令名称的命令处理程序别名

时间:2020-07-28 17:34:26

标签: javascript node.js discord.js

我正在研究Discord机器人,并试图改善我已经运行的命令处理程序。 我有一个文件夹,每个文件都是一个额外的命令。我想扩展系统,所以我有相同命令的别名,例如我希望我的clearchat命令可与/ clearchat或/ cc一起使用,但我不想仅创建另一个文件并复制代码。这就是我所拥有的:

src/Resources

,然后是命令文件夹中的命令文件:

// I left out the other imports etc.
client.commands = new Discord.Collection();

// Reading commands-folder
const commandFiles = fs.readdirSync("./commands/").filter(file => file.endsWith(".js"));
for (const file of commandFiles) {
    const command = require(`./commands/${file}`);
    client.commands.set(command.name, command); 
}

client.on("message", msg => {

    if (msg.content.startsWith(config.prefix) && !msg.author.bot && msg.guild) {
        const args = msg.content.slice(config.prefix.length).split(" ");
        const command = args.shift().toLowerCase();
        
        if (client.commands.find(f => f.name === command)) {
            client.commands.get(command).execute(client, msg, args);    
        }
    }
});

(我知道最多最多只能删除100条消息,对此我可以接受)

通过在我的client.on(“ message)函数中更改几行,我想像一些东西,而只需要在clearchat.js文件中写一行module.exports = { name: "clearchat", execute(client, msg, args) { if (msg.member.hasPermission("ADMINISTRATOR")) { msg.channel.messages.fetch({limit: 99}).then(messages => { msg.channel.bulkDelete(messages); }); } } } 之类的行,就可以编写尽可能多的别名。我想要。

谢谢!

1 个答案:

答案 0 :(得分:0)

首先,您必须使用命令中的别名创建一个数组。

module.exports = {
    name: "clearchat",
    aliases: ["cc"],
    execute(client, msg, args) {
        
    }
}

然后,就像使用命令一样,为别名创建一个Collection。

client.aliases = new Discord.Collection()

最后,将别名绑定到命令:

if (command.aliases) {
    command.aliases.forEach(alias => {
        client.aliases.set(alias, command)
    })
}

现在,当您想执行命令时,必须检查它是否具有别名。

const commandName = "testcommand" // This should be the user's input.
const command = client.commands.get(commandName) || client.aliases.get(commandName); // This will return the command and you can proceed by running the execute method.

fs.readdir(`./commands/`, (error, files) => {
    if (error) {return console.log("Error while trying to get the commmands.");};
    files.forEach(file => {
        const command = require(`./commands/${file}`);
        const commandName = file.split(".")[0];

        client.commands.set(commandName, command);

        if (command.aliases) {
            command.aliases.forEach(alias => {
                client.aliases.set(alias, command);
            });
        };
    });
});