【问题标题】:Discord.js deleting field and replacing it with a new oneDiscord.js 删除字段并将其替换为新字段
【发布时间】:2021-05-23 03:09:44
【问题描述】:

所以,我正在尝试将一个嵌入替换为另一个具有相同内容的嵌入,但我想替换一个字段。到目前为止,这是我所得到的:

const modlog = bot.channels.cache.get("770389813345255454");
const caseNumber = args[0];
const newReason = args.slice(1).join(" ");

await modlog.messages.fetch({ limit: 100 }).then((messages) => {
    const caseLog = messages
        .filter((m) => m.author.id === bot.user.id && m.embeds[0] && m.embeds[0].type === "rich" && m.embeds[0].footer && m.embeds[0].footer.text.startsWith("Case") && m.embeds[0].footer.text === `Case ${caseNumber}`)
        .first();
    modlog.messages.fetch(caseLog.id).then((logMsg) => {
        const embed = logMsg.embeds[0];
        let newEmb = new MessageEmbed(embed).spliceFields(2, 1); // field 2 is the one i want to delete, and i want to delete 1 field.
        newEmb.addField("Reason:", newReason);
        logMsg.edit(newEmb);
    });
});

我尝试了该命令,它并没有删除其他字段,而是添加了新字段。我做错了什么?

【问题讨论】:

  • 您能否调试代码并回答newEmb 中存储的内容,它是对象还是undefined,请注意,复制对象有不同的方法。

标签: javascript node.js discord discord.js


【解决方案1】:

您可以直接更新字段,而无需使用spliceFields()embed.fields 包含一个字段数组,因此您可以通过索引访问元素。

如果要编辑第二个字段,可以更新embed.fields[1]。您可以为新对象分配名称、值和内联键。在您的情况下,新对象将是 { name: 'Reason', value: newReason }

查看下面的 sn-p。我还将那些 .then()s 更改为 awaits,因为您已经在使用它们了。

const messages = await modlog.messages.fetch({ limit: 100 });
const caseLog = messages
  .filter(
    (m) =>
      m.author.id === bot.user.id &&
      m.embeds[0] &&
      m.embeds[0].type === 'rich' &&
      m.embeds[0].footer &&
      m.embeds[0].footer.text.startsWith('Case') &&
      m.embeds[0].footer.text === `Case ${caseNumber}`,
  )
  .first();

const logMsg = await modlog.messages.fetch(caseLog.id);
const embed = logMsg.embeds[0];

// the second field is index 1
embed.fields[1] = { name: 'Reason', value: newReason };

logMsg.edit(embed);

如果你想使用spliceFields(),你可以通过添加第三个参数来替换该字段,即我上面提到的同一个对象:

const logMsg = await modlog.messages.fetch(caseLog.id);
const embed = logMsg.embeds[0];

// the second field is index 1
embed.spliceFields(1, 1, { name: 'Reason', value: newReason });

logMsg.edit(embed);

【讨论】:

    猜你喜欢
    • 2018-09-18
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多