如何从嵌入中获取信息?

时间:2021-04-21 21:32:06

标签: javascript node.js discord.js

我一直在创建一个建议命令,我想要它以便我可以使用 -approve <The message id> 来编辑消息。问题是当我尝试使用

从中获取信息时
const Suggestionchannel = client.channels.cache.get("833796404383973442");
const messages = Suggestionchannel.messages.fetch({ limit: 100 })

它只获取所有消息而不是嵌入。我希望它获取嵌入内容,以便我可以获取数据并通过其 ID 编辑消息。有了数据,我可以显示谁提出了建议以及建议是什么,同时表明它被批准了。如何使用消息 ID 从嵌入中获取信息?

附带说明:我知道我可以使用 async 和 await 在相同的代码上轻松编辑它,但我希望它可以访问。如果我这样做并重新启动机器人,我将无法批准以前的建议,只有在重新启动机器人后才能批准新的建议。

1 个答案:

答案 0 :(得分:0)

首先,您必须等待从建议频道中获取消息,或者将其放入 .then 以不让 messages 成为 Promise。等待它不会改变您编辑消息的能力,您只需确保消息缓存中包含实际消息。

从频道获取消息将返回 Promise<Collection<Snowflake, Message>>。解析消息后,您将获得一个包含消息的集合。在 Message 类上,有一个名为 embeds 的数组。它包含消息的所有嵌入部分,通常,如果由机器人发送,则只包含一个 MessageEmbed

另一件事是,为了方便您,获取消息还包含一个消息 ID,如果提供,它将从通道中获取具有该 ID 的消息。这样做会改变它返回到 Promise<Message>

在您的代码中实现所有这些更改看起来像;

const Suggestionchannel = client.channels.cache.get("833796404383973442");
// make sure that your outer scope is asynchronous
const message = await Suggestionchannel.messages.fetch('INSERT MESSAGE ID OR VARIABLE HERE')
const embed = message.embeds[0]
//would be undefined if there is no embed
//would be a MessageEmbed if there is an embed
相关问题