如何检测特定用户发送的消息并删除?discord.py代码错误排查
问题排查与修复方案
现有代码的错误点
- 缩进错误:Python 语法强制要求缩进,
on_message异步函数下的逻辑代码没有正确缩进,会直接触发语法错误无法运行 delete()方法传参错误:discord.Message对象的delete()方法不需要传入message本身作为参数,多余参数会触发参数不匹配报错- 缺少重发消息的核心逻辑:现有代码只实现了删除目标用户消息的逻辑,没有实现重新发送相同内容的逻辑
process_commands位置错误:当前仅当消息发送者是目标用户时才会执行命令处理,会导致其他用户发送的命令完全无法被响应,应该放到判断逻辑之外
修复后的可运行代码
@client.event async def on_message(message): # 检测目标用户发送的消息 if message.author.id == 881583268569436200: # 先获取消息内容,避免删除后无法读取 msg_content = message.content await message.delete() # 在当前频道重新发送相同内容 await message.channel.send(msg_content) # 所有消息都要执行命令处理,避免命令失效 await client.process_commands(message)
额外注意事项
- 你需要确保机器人拥有当前频道的删除消息和发送消息权限,否则会触发权限类报错
- 如果需要同时转发消息中的附件、embed等内容,需要额外读取
message.attachments、message.embeds等属性在发送时传入 - 注意不要让重发的消息触发
on_message的二次检测,此处你填写的是个人用户ID,和机器人ID不一致不会出现循环触发问题
内容的提问来源于stack exchange,提问作者Apaar Edits
相关产品推荐
相关产品推荐

