我正在创建一个机器人,我希望通过丰富的嵌入内容做出回应。由于此命令有超过三打不同的arg,因此我认为可以通过将每个arg的嵌入移动到不同的.js文件来保持代码整洁,然后在适当的arg时使用'require'变量来调用文件用来。简单吧? 但是,每当我运行文件时,嵌入都无法正确呈现。
我尝试删除了前几行,因为我认为这是指定应将其作为消息而不是嵌入的bu发送,而bu只会导致错误消息(例如“未定义消息”或“无法发送”空消息”)
这是我在主命令文件中使用的代码,当我调用同一文件中的变量时,该代码将起作用:
else if (args[0] === 'butterfly') {
return message.channel.send(require('./butterfly.js'))
}
这是第二个文件中我很确定有问题的代码:
module.exports = (message) => {
message.channel.send({embed: {
color: 16615352,
author: {
name: "TEST",
url: "https://url.here",
icon_url: "https://url.here"
},
description: "test",
thumbnail: {
url: "https://url.here"
},
fields: [{
name: "Test",
value: "Test",
inline: true
},
{
name: "Test2",
value: "Test2",
inline: true
}
],
}
});
}
当前,我可以发送文本,但是它不能呈现为嵌入文本,而我只是从“(message)”开始获取代码文本。 我该怎么使用以指定代码应呈现为嵌入?
答案 0 :(得分:0)
问题:
在butterfly.js
中,您将module.exports
声明为一个函数。这意味着require()
返回该函数,但是您不调用它。因此,它实际上并没有执行。
您还试图在 message.channel.send()
内部发送消息,这会导致错误。
解决方案:
在此设置中,您会注意到RichEmbed构造函数。这很干净简单,而不是显式定义message选项的embed
属性。但是,主要要了解的是它为什么起作用:从butterfly.js
导出 embed ;新变量声明为embed,然后在TextChannel.send()
方法中使用。
const { RichEmbed } = require('discord.js');
const embed = new RichEmbed()
.setColor(16615352)
.setAuthor('TEST', 'iconURL', 'URL')
.setDescription('test')
.setThumbnail('iconURL')
.addField('Test', 'Test', true)
.addField('Test2', 'Test2', true);
module.exports = embed;
const embed = require('./butterfly.js');
return message.channel.send(embed)
.catch(console.error);
其他说明:
如果您像最初尝试的那样需要另一个文件中的功能,这些是如何调用它的示例:
require('./someFunction.js')(params);
const someFunction = require('./someFunction.js');
someFunction(params);