导入变量文件不会呈现嵌入状态

时间:2019-07-20 19:49:23

标签: javascript discord discord.js

我正在创建一个机器人,我希望通过丰富的嵌入内容做出回应。由于此命令有超过三打不同的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)”开始获取代码文本。 我该怎么使用以指定代码应呈现为嵌入?

1 个答案:

答案 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);