在 on_raw_message_delete 中获取消息内容

getting message content in on_raw_message_delete

我正在尝试制作一个机器人来检测消息何时被删除,并将消息发送到与消息内容相同的频道。

即使消息不在机器人 cached_messages 中,我也希望能够执行此操作,所以我使用 on_raw_message_delete(payload).

我的问题是,当尝试使用 await channel.fetch_message(payload.message_id) 从频道获取消息时,出现以下错误:
discord.errors.NotFound: 404 Not Found (error code: 10008): Unknown Message

我想这是因为消息已经从频道中消失了,但我不知道我还能如何从消息中获取内容或任何其他内容。

这是我的代码(请注意,我有一个 self 参数,因为此片段是 cog 的一部分)

@commands.Cog.listener()
async def on_raw_message_delete(self, payload):
    channel = self.bot.get_channel(payload.channel_id)
    message = await channel.fetch_message(payload.message_id)

    channel.send(f'Message deleted with content: {message.content}')

我也试过 channel = await self.bot.fetch_channel(payload.channel_id),但我得到了同样的错误

您可以为此使用 payload.cached_message

但问题是,如果删除的消息是在机器人离线时发送的,那么它 returns None 我想如果机器人看不到频道也是一样的。如果你的机器人 运行 不间断,那就没问题。

所以你可以简单地做:

@commands.Cog.listener()
async def on_raw_message_delete(self, payload):
    message = payload.cached_message
    channel = message.channel
    await channel.send(f'Message deleted with content: {message.content}')