discord.py已删除消息日志记录失效 无报错问题排查咨询
discord.py on_message_delete事件不触发排查解决步骤
- 检查代码中Intents初始化配置
discord.py v2.0及以上版本默认关闭特权Intent权限,你需要在初始化客户端时手动开启消息相关权限,示例配置如下:
import discord from discord.ext import commands # 声明Intents对象 intents = discord.Intents.default() # 开启消息内容权限,读取消息相关事件必须开启 intents.message_content = True # 开启服务器消息权限,监听服务器内消息删除 intents.guild_messages = True # 若需要监听私信消息删除,额外添加以下配置 # intents.dm_messages = True # 初始化客户端时传入intents参数 client = commands.Bot(command_prefix="!", intents=intents) # 若使用原生discord.Client,写法为: # client = discord.Client(intents=intents)
- 检查Discord开发者后台特权Intent开关
Message Content Intent属于平台限制的特权权限,必须手动在开发者后台开启才能生效:
操作路径:进入Discord Developer Portal对应机器人应用 → 左侧选择「Bot」菜单 → 下滑找到Privileged Gateway Intents区域 → 开启Message Content Intent开关后保存设置。
如果你的机器人接入服务器数量超过100,需要先完成平台身份验证才能开启该权限。
- 优化事件打印逻辑排除隐性触发
你当前编写的print(message)只会输出Message对象的默认格式化内容,可能存在已触发但输出内容不明显的情况,可以调整事件代码输出更清晰的日志:
@client.event async def on_message_delete(message): print(f"消息删除事件触发 | 发送者:{message.author} | 频道:{message.channel.name} | 消息内容:{message.content}")
- 确认消息在机器人缓存范围内
discord.py只会缓存机器人启动后接收到的消息,启动前就已发送的消息被删除时不会触发该事件,测试时请先在机器人在线时发送新消息再删除验证。
内容的提问来源于stack exchange,提问作者EpicMate
相关产品推荐
相关产品推荐

