gpt4 book ai didi

javascript - 在 node.js/discord.js 中导出/导入

转载 作者:太空宇宙 更新时间:2023-11-04 01:48:55 25 4
gpt4 key购买 nike

我目前正在使用discord.js制作一个discord机器人,因为在我发现使用几个js文件相当困难之前,我还没有在没有html文件的情况下进行编程。起初我以为使用导入和导出会起作用,但 Node 还不支持它。我做了一些窥探,这就是我决定做的:

索引.js

const commandFunctions = require('./commands.js')();
const botconfig = require('./botconfig.json');

bot.on('message', async message => {
if (message.author.bot) { return; }
if (message.channel.type === 'dm') { return; }

messageArray = message.content.split(' ');
cmd = messageArray[0];
arg = messageArray.slice(1);

if (cmd.charAt(0) === prefix) {
checkCommands(message);
} else {
checkForWord(message);
}
});

function checkCommands(message) {
botconfig.commands.forEach(command => {
if (arg === command) {
commandFunctions.ping();
}
});
}

commands.js

module.exports = function() {
this.botinfo = function(message, bot) {
let bicon = bot.user.displayAvatarURL;
let botembed = new Discord.RichEmbed()
.setColor('#DE8D9C')
.setThumbnail(bicon)
.addField('Bot Name', bot.user.username)
.addField('Description', 'Inject the memes into my bloodstream')
.addField('Created On', bot.user.createdAt.toDateString());
return message.channel.send(botembed);
}

this.roll = function(message) {
let roll = Math.floor(Math.random() * 6) + 1;
return message.channel.send(`${message.author.username} rolled a ${roll}`);
}

this.ping = function() {
return message.channel.send('pong');
}
}

botconfig.json

"prefix": "+",
"commands": [
"botinfo",
"roll",
"ping"
]

我的目标是使代码具有适应性,只需在 json 文件中添加一个单词以及在Commands.js 中连接到它的函数即可。在 checkCommand 函数中,它还应该触发与命令同名的函数,现在我已将其设置为无论使用什么命令都触发 ping,因为我在参数方面遇到了一些问题。问题是命令函数根本没有被触发,很确定 checkCommand 函数是出了问题的地方。

最佳答案

对于指向函数内返回对象的 this ,您必须使用 new 运算符调用它:

 const commandFunctions = new require('./commands.js')();

然而,这是相当违反直觉的,所以你只需要从“commands.js”导出一个对象:

module.exports = {
ping: function() { /*...*/ }
//...
};

然后可以轻松导入:

const commandFunctions = require('./commands.js');
commandFunctions.ping();
<小时/>

要执行命令,不需要加载json,只需检查命令对象中是否存在该属性即可:

 const commands = require('./commands.js');

function execCommand(command) {
if(commands[command]) {
commands[command]();
} else {
commands.fail();
}
}
<小时/>

PS:全局变量(cmdarg)是一个非常非常糟糕的主意,相反,您应该将值作为参数传递。

关于javascript - 在 node.js/discord.js 中导出/导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50426635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com