【问题标题】:Disnake / discord.py How to to edit a bot embed after multiple days?Disnake / discord.py 如何在多天后编辑嵌入的机器人?
【发布时间】:2022-08-06 11:16:59
【问题描述】:

我有一个机器人,它发布带有嵌入和一些按钮的消息。一段时间后(最多多天),我想更改嵌入中的一些文本并删除按钮。这应该在不对任何事件做出反应但纯粹基于时间戳的情况下发生,这意味着我没有得到引用原始消息的交互对象。

我想原则上我可以使用asyncio.sleep()bot.wait_for(),但我已经体验到如果连接在某些时候丢失,即使只是很短的时间,这些也很容易失败。大多数情况下,当时间过去几个小时时,计划的事件不会触发。有什么方法可以让这个更可靠吗?

我想到的另一种可能性是在我的数据库中记录频道和消息 ID,然后,一旦时机成熟,使用bot.get_channel(channel_id)channel.fetch_message(message_id) 获取消息并更新它。这对我来说似乎是一种解决方法,所以我想知道是否有更直接/优雅的方式来实现这一目标?

  • 例如,您可以尝试创建一个任务,例如每 5 秒检查一次消息。有关后台任务的示例,请参阅 here
  • 如果您重新启动机器人,数据(消息)将需要在某个地方供您访问。所以是的,一定要将消息和频道 ID 存储在某处。您需要使用后台任务来确定下一次更新消息的时间(在此之前您可以找到 min 和 asyncio sleep)

标签: python discord.py


【解决方案1】:

在这种情况下,我使用许多其他公共机器人开发人员使用的解决方案是:

  1. 存储时间戳,以及必要的细节,如消息ID,频道ID,公会ID
  2. 要将消息作为 Webhook 发布,因此我们只需存储时间戳消息ID.Click to see how messageID alone helps with respect to Webhooks(不和谐)

    您可以创建一个@tasks.loop() 来检查时间戳,然后,您可以根据消息的类型获取消息(使用edit_message(messageID) 获取Webhook 消息)。

【讨论】:

    猜你喜欢
    • 2020-04-20
    • 2021-04-09
    • 2020-08-03
    • 2020-03-17
    • 2020-09-08
    • 2020-10-10
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多