在聊天 discordjs 之间复制嵌入和修改

Posted

技术标签:

【中文标题】在聊天 discordjs 之间复制嵌入和修改【英文标题】:Copy embed and modify between chats discordjs 【发布时间】:2021-12-24 05:55:39 【问题描述】:

我正在尝试更改有关嵌入消息的一些信息,然后从频道传输消息,但是当我尝试传输消息时,出现此错误:

RangeError [EMBED_FIELD_NAME]: MessageEmbed field names must be non-empty strings.

我正在尝试这样:

let title;
let fieldName;
let fieldValue;

if(message.channel.id == analiseChannelID && reaction.emoji.name === 'aprovada') 
  message.embeds.forEach(embeds => 
    let title = embeds.title;
    //console.log(embeds.title); // logging to console ✅
    let fields = embeds.fields;
    fields.forEach((field) => 
      //console.log(field.name); // logging to console ✅
      //console.log(field.value); // logging to console ✅
      fieldName = field.name;
      fieldValue = field.value;
    );
    let embed1 = new Discord.MessageEmbed().addFields(fieldName, fieldValue)
    ChannelAprovada.send(embed1)
  )

【问题讨论】:

【参考方案1】:

您使用了需要对象作为参数的MessageEmbed#addFields 方法(带有s)。将其更改为 MessageEmbed#addField 应该可以工作

let embed1 = new Discord.MessageEmbed()
                .addField(fieldName, fieldValue) //no "s"

【讨论】:

它说消息是空的 您使用的是什么版本的 discord.js? 我使用的是 v16.11.0 @Maker__ 这是你的 node.js 版本,而不是 discord.js 我在哪里可以找到那个?【参考方案2】:

正如@MrMythical 所说,将MessageEmbed#addFields 更改为MessageEmbed#addField 应该会对您有所帮助,但请尝试使用.addField(fieldName, `** ** $fieldValue`) 而不是.addField(fieldName, fieldValue)!使用** ** 应该可以帮助您防止出现错误,即使您的fieldValue 出于某种原因为空!

此外,在 discord.js v13 中,您必须使用 ChannelAprovada.send(embeds: [embed1]) 而不是 ChannelAprovada.send(embed1) 来发送嵌入!

【讨论】:

【参考方案3】:

再试一次。

.addFields( name: `text`, value: `text`)

对于不和谐 v.13

.addField("text", "text")

【讨论】:

.addFields 用于 Discord v.12,但在 v.13 中用于多个字段,所以我同意。 哦,这就是重点,我必须从旧消息嵌入中打印多个字段,例如:名称;姓;年龄 ||但这样甚至没有打印,并说字段是空的 @Maker__ 你找到你的 discord.js 版本了吗? 如果您使用的是 discord v.12,它可能会对您有所帮助,但如果您使用的是 discord v.13,那就另当别论了 我使用的是 13.2.0

以上是关于在聊天 discordjs 之间复制嵌入和修改的主要内容,如果未能解决你的问题,请参考以下文章

discordjs 机器人的聊天命令

如何在 DiscordJS 嵌入消息中使用本地文件作为缩略图?

DiscordJS 发送嵌入 DM

如何在 discordjs-commando 中编辑/替换嵌入

DiscordJS 编辑现有嵌入

DiscordJS 13用户嵌入显示在特定频道发送的最后一条消息