如何在discord.js中搜索嵌入式消息

3

我正试图在discord.js上建立一个简单的星板系统,但删除消息的部分让我束手无策。当前,如果一条消息获得了一个星,就会在星板频道中创建一个嵌入式消息,而且关键是页脚是原始消息的id。我希望通过找到具有该页脚的嵌入式消息,然后删除该嵌入式消息来使反向功能(当星号被移除时,该嵌入式消息被删除)起作用,但由于某种原因它不起作用。我一直收到的错误是“UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'cache' of undefined.” 如何正确定义这个变量?

  if (reaction.emoji.name === `⭐`) {
    const guild = reaction.message.guild;
    await reaction.fetch();
    const stars = reaction.count;
    if (stars === 0) {
      const embed = guild.messageEmbed.cache.find(embed => embed.footer === reaction.message.id);
      embed.delete
    }
  }
}
1个回答

3

你需要从 Starboard 频道中找到嵌入式内容,而不是整个服务器。 你可以使用 Channel.messages.fetchChannel.messages.cache.find 来查找特定消息。尝试这样做:

if (reaction.emoji.name === `⭐`) {
    const guild = reaction.message.guild;
    await reaction.fetch();
    const stars = reaction.count;
    if (stars === 0) {
      guild.channels.cache.get('starboard-channel-id').messages.fetch().then(fetchedMsgs => {
        fetchedMsgs.find(x => x.embeds[0].footer.text == reaction.message.id).delete();
      })
    }
  }
}

我收到了这个错误 在Map.find (/home/runner/Libertarian-Party-Veteran-Caucus-Bot/node_modules/@discordjs/collection/dist/index.js:161:17) 在Client. (/home/runner/Libertarian-Party-Veteran-Caucus-Bot/index.js:200:28) 在processTicksAndRejections (internal/process/task_queues.js:97:5)``` - TGercken
1
@tpoodle1 应该是 .get() - MrMythical
@MrMythical,.get() 是哪一部分? - TGercken
@tpoodle1 guild.channels.cache.find 部分应该改为 get。我已经更新了代码。 - mswgen
1
@mswgen 它运行正常,非常感谢! - TGercken
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接