在 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}')
我正在尝试制作一个机器人来检测消息何时被删除,并将消息发送到与消息内容相同的频道。
即使消息不在机器人 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}')