我一直在创建一个建议命令,我想要它以便我可以使用 -approve <The message id>
来编辑消息。问题是当我尝试使用
const Suggestionchannel = client.channels.cache.get("833796404383973442");
const messages = Suggestionchannel.messages.fetch({ limit: 100 })
它只获取所有消息而不是嵌入。我希望它获取嵌入内容,以便我可以获取数据并通过其 ID 编辑消息。有了数据,我可以显示谁提出了建议以及建议是什么,同时表明它被批准了。如何使用消息 ID 从嵌入中获取信息?
附带说明:我知道我可以使用 async 和 await 在相同的代码上轻松编辑它,但我希望它可以访问。如果我这样做并重新启动机器人,我将无法批准以前的建议,只有在重新启动机器人后才能批准新的建议。
答案 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