在on_raw_message_delete中获取消息内容

时间:2020-10-06 12:13:07

标签: python-3.x discord discord.py discord.py-rewrite

我正在尝试创建一个可以检测到何时删除消息的机器人,并将消息发送到与消息内容相同的通道。

即使消息不在漫游器的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参数,因为此代码段是齿轮的一部分)

@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),但出现相同的错误

1 个答案:

答案 0 :(得分:1)

您可以为此使用payload.cached_message

但是问题是,如果已删除的消息是在漫游器处于脱机状态时发送的,则它返回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}')