所以我一直在使用Discord.JS库制作Discord机器人,我遇到了一个问题 . 很确定问题与Javascript和Discord.JS有关,所以我会问这里并希望得到一些帮助 .
我有一个名为commandManager.js的文件,它包含我所有的基本命令功能 . 其中一个是自动加载来自/ commands /文件夹的命令,并根据它们的类别(通过导出在命令中指定)将它们分配给一个数组 .
global.userCommands = {};
global.modCommands = {};
global.adminCommands = {};
global.ownerCommands = {};
exports.init = function(bot)
{
fs.readdir("./commands/", (error, files) =>
{
if (error)
{
logger.error(error);
}
files.forEach(file =>
{
let commandFile = require(`../commands/${file}`);
let commandName = file.split(".")[0];
if (commandFile.info.category == "User")
{
userCommands[commandName] = commandFile;
}
else if (commandFile.info.category == "Mod")
{
modCommands[commandName] = commandFile;
}
else if (commandFile.info.category == "Admin")
{
adminCommands[commandName] = commandFile;
}
else if (commandFile.info.category == "Owner")
{
ownerCommands[commandName] = commandFile;
}
else
{
logger.warn("Could not add the command " + commandName + " to any of the categories");
}
});
logger.info("Loaded " + files.length + " command(s)");
});
}
然后,我可以在实际的机器人消息位中使用命令,我做了如下:
exports.run = function(bot, msg)
{
const args = msg.content.slice(config.prefix.length).trim().split(/ +/g);
const command = args.shift().toLowerCase();
const cleanCommand = command.slice(config.prefix.length);
if (msg.author.bot)
{
return;
}
else if (msg.content.indexOf(config.prefix) !== 0)
{
return;
}
else if (has.call(userCommands, cleanCommand))
{
msg.reply("user");
}
else if (has.call(modCommands, cleanCommand))
{
}
else if (has.call(adminCommands, cleanCommand))
{
}
else if (has.call(ownerCommands, cleanCommand))
{
}
else
{
msg.reply(`that command does not even exist! You can say ${config.prefix}help for a list of commands!`);
}
}
因此,当我说命令例如“ping”时,它应该回复msg.reply(“user”),但它说它不存在任何东西 . 我宣称像这样的全球性,你很好奇 .
global.has = Object.prototype.hasOwnProperty;
如果你想看到命令,它如下:
exports.info =
{
name: "Ping",
permission: 10,
category: "User",
about: "Makes the bot respond with pong, useful to see if the bot is working."
};
exports.run = function(msg)
{
msg.channel.send("Pong!");
}
任何提示,参考,示例,或只是普通的勺子喂食是100%欢迎 . 另外,如果你想分享一些更好的技巧来做我正在做的事情,请告诉我,因为我只是一个JS的初学者 .
1 回答
以下是完全基于意见的......
我打赌你想要使用嵌套命令,例如播放音乐和播放视频,所以在我看来,命令树将成为这里的方式 . 因此,也无需解析文件夹中的命令,而是可以拥有更独立的结构 . 起始文件如下所示:
使用此模式可以将代码应用于一大堆命令(通过
[sub]
),并且可以使用子命令等(通过[exit]
)运行命令 . 现在让我们实现路由:为了让它运行:
您仍然可以使用每个类别处理程序等扩展它 .