Discord.js 分片,如何使用 broadcastEval 发送嵌入消息?
Posted
技术标签:
【中文标题】Discord.js 分片,如何使用 broadcastEval 发送嵌入消息?【英文标题】:Discord.js Sharding, How do you send an embed message with broadcastEval? 【发布时间】:2020-11-04 06:19:08 【问题描述】:我正在尝试将嵌入消息发送到使用分片机器人的特定频道。 我已经使用此代码成功发送了一条简单的消息:
client.shard.broadcastEval(`
(async () =>
let channel = await this.channels.get("683353482748756047");
channel.send("Hello")
)()
`)
当我想发送嵌入消息时,问题就开始了。我试过像这样传递变量:
//exampleEmbed is created
client.shard.broadcastEval(`
(async () =>
let channel = await this.channels.get("683353482748756047");
channel.send('$exampleEmbed')
)()
`)
但消息的发送方式类似于“[object Object]”。
我曾考虑将频道对象返回到 broadcastEval 之外,然后发送我的变量,但我读过这是不可能的,因为您无法返回完整的不和谐对象。
我应该如何发送嵌入消息?感谢您的宝贵时间。
【问题讨论】:
【参考方案1】:好的,我通过在broadcastEval 中创建嵌入消息并使用'$' 语法来解决它。
例子:
client.shard.broadcastEval(`
(async () =>
const Discord = require('discord.js');
let channel = await this.channels.get("683353482748756047");
if(channel)
//if shard has this server, then continue.
let message = new Discord.RichEmbed()
.setThumbnail(this.user.displayAvatarURL)
.setTitle('Title')
.addField("Something useful:", '$useful')
.addField("Another useful thing:", '$useful2')
.setTimestamp()
channel.send(message)
)()
【讨论】:
ahm 你现在可以发送工作代码吗,因为我也在为同样的问题而苦苦挣扎,但我无法真正关注你的解决方案文本 你也可以这样做:```client.shard.broadcastEval(` (async () => const Discord = require('discord.js'); let channel = await this.channels. get("683353482748756047"); if(channel) channel.send(new Discord.RichEmbed(data)) )() ``` 在我的示例中,这很有帮助,因为它有助于在父级中形成丰富的嵌入函数并将消息作为参数传递。【参考方案2】:为了使用 broadcastEval 发送嵌入消息,您需要对嵌入进行字符串化。在你的情况下:
client.shard.broadcastEval(`
(async () =>
const channel = await this.channels.cache.get('683353482748756047');
if (channel)
channel.send( embed: $JSON.stringify(exampleEmbed) );
)();
`);
请记住,broadcastEval 在所有分片中运行代码,因此您需要检查通道是否存在,否则您会遇到错误。
【讨论】:
以上是关于Discord.js 分片,如何使用 broadcastEval 发送嵌入消息?的主要内容,如果未能解决你的问题,请参考以下文章
Discord JS:UnhandledPromiseRejectionWarning:错误:Shard 的客户端准备就绪时间过长
我将如何使用两个不同版本的 discord.js | Discord.js 机器人