当前位置: 首页 > 知识库问答 >
问题:

用discord.js从文本频道获取最后一条消息

朱季
2023-03-14

我觉得我对这个话题的所有研究只会让我找到过时的解决方案。

与我的不和。js机器人,我有一个命令。为了让它工作,我需要在命令发出之前获取通道中的最后一条消息。我正在努力处理所有的抓取、分区和缓存等问题。

有时,当我在机器人启动后立即发布消息并使用上面的命令时,它会起作用,但是如果我重新启动机器人,它似乎会得到错误的消息。另外,超过14天的邮件怎么办?

我不能真正提供代码,因为它只有一行,比如:

const message=msg。频道消息


共有2个答案

阴高寒
2023-03-14

您可能希望签出此消息并使用messages#fetch来获取非缓存消息!

希望这有帮助:)

班安平
2023-03-14

message.channel.messages返回发送到此通道的消息的管理器。要获取最后一个,您可以使用它的getch()方法和查询选项{Limited: 1}。这意味着,您可以使用message.channel.messages.fetch({限制: 1})获取通道中的最后一条消息。但是,如果在发送命令后运行此读取,则最后一条消息将是带有该命令的消息。

要解决此问题,可以通过增加限制来获取通道中的最后两条消息:message。频道信息。获取({limit:2})。获取的集合将包含命令(您用来获取最后一条消息)和之前的消息。

不一致集合有一个。last()方法获取最后一个值,因此您现在可以使用以下方法获取最后一条消息:

const messages = await message.channel.messages.fetch({ limit: 2 });
const lastMessage = messages.last();

console.log(lastMessage.content);

注:它在获取超过14天的消息方面没有问题。

 类似资料:
  • 我重用了一个snipe命令代码来执行这个fetch命令,但这并不是我的问题。 我正试图从一个频道获取一条消息,并将其发布到指定的频道中,例如:在X中抓取消息,并将其发布到Y中。如果这有意义,那么到目前为止,我所拥有的只有: 非常感谢您的帮助! ps:到现在为止,它从它运行的命令的通道中获取消息。如果我在X通道中发送了一条消息,并在X通道中运行该命令,它将在X通道中获取消息。我的目标是尝试从一个频道

  • 我希望我的Discord jda bot在启动后读取textchannel的最后一条消息。 所以我打电话: MessageHistory类没有getLatestMessage方法。出于某种原因,我选择了短信频道。getHistory()始终为空,因此始终返回null。 是否有其他方法读取消息(在机器人启动之前编写)。 一些附加信息:文本频道是正确的文本频道。它不是空的,我也试着在机器人活跃的时候写

  • 问题内容: 我正在尝试从表中进行SQL查询,-从所有对用户中以用户36作为发送者或接收者的最后一条消息,并将它们与用户表结合起来以获取名称。我已经设法创建了这样的东西,但仍然想问一下是否还有更简单的方法。有效的解决方案。MySQL版本-5.5.31 询问: 谢谢。更新。样本消息表中的数据: mysql> SELECT id,sender_user_id,receiver_user_id,文本,日期

  • 注意:我使用的是discord.jsV11,我知道我打算下个月在我解开我的意大利面条代码之后将它更新到V12。 所以我不知道如何从一条消息中获取messageID,而这条消息已经在机器人中引发了反应。 我希望它的工作方式如下:一个用户对一个消息做出反应,任何消息,反应在bot中编程。然后,bot获取给出该反应的消息url,然后向发送消息。 所以我尝试使用这段代码,但真的无法达到我需要达到的目的:

  • 问题内容: 我正在使用mysql并遇到一些问题。我想检索插入的最后一行。 <<以下是详细>> 以下是我创建表格的方式。 我在其中插入了四个值,如下所示 当我执行时,我得到如下输出 当我尝试下面的代码时, 我得到如下输出。 但是,当我使用代码时,出现错误 使用时,表中没有任何数据。 链接以播放数据 注意: 这里我使用4只是为了获得所需的输出。稍后我可以从查询中获取 如果我只想查看最后一条记录,请建议

  • 我正在对一个不和谐的机器人进行编码,我想在其中执行命令并且它将从id为的特定通道(该通道可能是发送的不同通道,也可能不是)拉出一个随机的of消息。我一直在查看文档中的discord.js,但我找不到一种方法,可以通过它的ID获取一个TextChannel,然后使用TextChannels函数,从而获得MessageManager和一个消息集合。 我知道我可以使用获得公会(其中是的触发器)或获得特克