Javascript 如何使用来自不同文件的嵌入消息?

Javascript 如何使用来自不同文件的嵌入消息?,javascript,discord.js,Javascript,Discord.js,我在留言方面遇到了麻烦。我在下面提供了index.js的代码,其中我尝试使用“globalspeakfunction.js”中的函数 不要担心我发送的变量,它们看起来很特别,但我只提供了相关代码,希望能减少混淆 我正在GlobalSpeakFunction.js中构建嵌入消息,然后通过“index.js”中提供的消息通道发送它 但是,我的控制台返回“无法发送空消息”,当我对EmbedMessage执行console.log时,它会完美地返回embed消息吗 我尝试在send()函数中的Embed

我在留言方面遇到了麻烦。我在下面提供了index.js的代码,其中我尝试使用“globalspeakfunction.js”中的函数

不要担心我发送的变量,它们看起来很特别,但我只提供了相关代码,希望能减少混淆

我正在GlobalSpeakFunction.js中构建嵌入消息,然后通过“index.js”中提供的消息通道发送它

但是,我的控制台返回“无法发送空消息”,当我对EmbedMessage执行console.log时,它会完美地返回embed消息吗

我尝试在send()函数中的EmbeddeMessage之后添加一个字符串“test”,然后它返回

[object Object]test
我不知道这里发生了什么。我是否无法在不同的文件中构建嵌入消息,然后将其发送回我的bot?还是我只是忽略了什么

index.js

const Discord = require('discord.js');
const client = new Discord.Client();
const speak = require('../GlobalSpeakFunction.js');

client.on('message', message => {
    if (message.content.toUpperCase().includes(`test`)){
        speak("778978295059972106", message, "test", "Default");
    }
}
const Discord = require("discord.js")

module.exports = function speak(charID, data, message, emotion){
    var EmbedMessage = new Discord.MessageEmbed()
        .setColor('#0099ff')
        .setTitle('title')
        .setURL('https://discord.js.org/')
        .setDescription(message)
        .setThumbnail('https://drive.google.com/file/d/17J90PzTLBR96wTwk_Wl3U06-or6ZjPW2/view')
        .setTimestamp();
    message.channel.send(EmbedMessage);           
}
GlobalSpeakFunction.js

const Discord = require('discord.js');
const client = new Discord.Client();
const speak = require('../GlobalSpeakFunction.js');

client.on('message', message => {
    if (message.content.toUpperCase().includes(`test`)){
        speak("778978295059972106", message, "test", "Default");
    }
}
const Discord = require("discord.js")

module.exports = function speak(charID, data, message, emotion){
    var EmbedMessage = new Discord.MessageEmbed()
        .setColor('#0099ff')
        .setTitle('title')
        .setURL('https://discord.js.org/')
        .setDescription(message)
        .setThumbnail('https://drive.google.com/file/d/17J90PzTLBR96wTwk_Wl3U06-or6ZjPW2/view')
        .setTimestamp();
    message.channel.send(EmbedMessage);           
}

我不确定您在哪里遇到了“无法发送空消息”错误,我无法在本地复制它。然而,这里有几个问题:

首先,在
message.content
上使用
toUpperCase()
,然后检查它是否包含(小写的)“test”。因此,这个if语句永远不会执行

其次,
speak()
函数中参数的顺序是
charID、data、message、emotion
,但是您将它们作为
“778978295059972106”、message、“test”、“Default”
(注意调用函数时如何交换
数据
消息

第三,
set缩略图()
函数需要一个指向图像的直接链接(以文件扩展名结尾,如.png或.jpg)。您提供的是一个Google驱动器链接,该链接另外设置为private,这使得除您之外的任何人都无法读取。我建议将其上传到图像主机,并从那里获得直接链接

而且,
[object object]
只是对象的字符串表示形式。JavaScript试图将MessageEmbed(对象)转换为字符串(因为您试图在其中附加“test”。

发现了一个问题:

client.on('message', message => {
  if (message.content.toUpperCase().includes(`test`)){
      speak("778978295059972106", message.content, "test", "Default");
  }
}

您传入的
消息
值必须是
消息。内容

当您尝试发送错误值时,会出现“无法发送空消息”错误,例如
未定义的
空的
。我知道,但在使用此代码时我无法获取它-似乎嵌入的构造正确,至少在这次通话中,
speak()
。上下混淆是我的错。我将includes()的内容替换为test,以显示上述代码。数据变成消息,消息变成“测试”,这似乎令人困惑,但这仍然是正确的。即使图像是私有的,setThumbnail也可以工作。。不知道这是怎么回事?“无法发送空消息”错误出现在我的控制台中,我也在试图打破我的头脑。我不知道它是如何或为什么这样做的。@Xeoth-oh,我的坏消息更改message.channel.send(EmbedMessage);发送({embed:EmbedMessage})成功了!