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