Javascript 如何为Discord.js bot编写事件/命令处理程序?
我已经开始使用Discord.js库在Node.js中创建一个Discord bot。但是,所有代码都包含在一个索引文件中Javascript 如何为Discord.js bot编写事件/命令处理程序?,javascript,node.js,discord.js,Javascript,Node.js,Discord.js,我已经开始使用Discord.js库在Node.js中创建一个Discord bot。但是,所有代码都包含在一个索引文件中 如何将命令和事件分别组织到单独的文件中,并在需要时运行它们?为bot组织代码的一种优秀、干净的方法是使用事件和命令处理程序 简单地说。 您从一个小索引文件开始初始化客户机和其余代码。事件处理程序保存每个事件的文件,并在事件发出时调用这些文件。然后,在客户端的消息事件中,通过从预期命令的文件运行代码,您可以避免长if链和开关/案例 什么是模块? 您需要了解的基本Node.
如何将命令和事件分别组织到单独的文件中,并在需要时运行它们?为bot组织代码的一种优秀、干净的方法是使用事件和命令处理程序
简单地说。 您从一个小索引文件开始初始化客户机和其余代码。事件处理程序保存每个事件的文件,并在事件发出时调用这些文件。然后,在客户端的
消息
事件中,通过从预期命令的文件运行代码,您可以避免长if
链和开关
/案例
什么是模块? 您需要了解的基本Node.js结构是一个 [模块是一组]要包含在应用程序中的功能 引自 因此,可以将模块想象成一个整齐地贴好胶带的盒子,其中包含代码片段。你可以把包裹带到某个地方,打开它,然后打开包装。在JavaScript术语中,您可以在程序中的其他地方需要该模块,并利用其中包含的代码。模块可以包含变量、类、函数等,您需要在代码的不同位置使用它们
使用模块和导出。 既然您知道了模块是什么,那么您就必须了解如何使用它们 对于处理程序,您只需要使用
模块
对象的导出
属性。通过对模块使用,返回。考虑下面的设置。
单一出口。
Question.js
课堂提问{
构造函数(作者、详细信息){
this.author=作者;
this.details=详细信息;
这个。答案=[];
}
}
module.exports=问题;
newQuestion.js
const Question=require('./Question.js');
const myQuestion=新问题(“我”,“如何编写事件/命令处理程序?”);
在Question.js
中,将创建一个新类Question,并将其分配给module.exports
。然后,当newQuestion.js
中需要Question.js
时,Question
被声明为导出类。它可以像往常一样使用
多重出口。
现在,例如,如果您需要导出多个类
Posts.js
类问题{…}
类答案{…}
module.exports={问题,答案};
//或者。。。
//module.exports.Question=问题;
//module.exports.Answer=答案;
newQuestion.js
const{Question}=require('./Posts.js');
const myQuestion=新问题(…);
这样,module.exports
被定义为一个对象,包含创建的类。这意味着require()
将返回一个对象,因此您可以从该对象中选择所需的类
创建事件处理程序。 您应该首先为事件创建一个文件夹,然后为每个事件创建一个文件。根据事件的名称命名文件。例如,对于您的客户端,该文件应命名为
message.js
设置事件文件。
实现您现在对模块的了解,您可以编写事件文件。例如
message.js
module.exports=(客户端,消息)=>{
//此代码将在以下情况下执行:
//发出“消息”事件。
};
设置处理程序。
要生成实际的处理程序,可以在函数中放置以下代码以加载事件
const requireAll=require('require-all');//别忘了安装!
const files=requireAll({//需要您的
dirname:`${\uu dirname}/events`,//具有名称的事件目录
筛选器://^(?)(.+)\.js$///以“.js”结尾而不是开始
}); // 使用“-”(一种禁用文件的方法)。
client.removeAllListeners();//防止重新加载时重复侦听器。
//注意:这会删除侦听器
//附件为DISCORD.JS!
对于(文件中的const name){//遍历files对象
const event=files[name];//并将侦听器附加到每个
//事件,将“客户端”作为
on(name,event.bind(null,client));//第一个参数,其余参数
//预期参数的定义
console.log(`Event-loaded:${name}`);//然后,记录
}//成功加载到控制台。
现在,当您的客户机发出一个您有文件要处理的事件时,其中的代码将运行
创建命令处理程序。 与事件处理程序一样,您应该首先为命令创建一个单独的文件夹,然后为每个命令创建文件 设置命令文件。 您可以导出“运行”函数和配置对象,而不是仅导出一个函数
help.js
module.exports.run=async(客户端、消息、参数)=>{
//此代码将被执行为
//运行“help”命令。
};
module.exports.config={
姓名:“帮助”,
别名:['h']//即使不需要别名,也将其保留为数组。
};
设置处理程序。
就像事件处理程序一样,将此代码放在函数中以加载命令
const requireAll=require('require-all');//使用相同的npm模块。。。
const files=requireAll({//需要您的
dirname:`${\uuu dirname}/commands`,//command di