我正在研究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);
});
}
}
}
之类的行,就可以编写尽可能多的别名。我想要。
谢谢!
答案 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);
});
};
});
});