DiscordPy混合清除命令异常:前缀可用,斜杠命令无响应报错
问题解决:Discord.py Hybrid Clear命令斜杠调用报错
问题原因
斜杠命令调用时,你先执行了ctx.channel.purge(limit=limit+1),这会同时删除用户发起的斜杠命令消息;之后尝试用ctx.reply或ctx.send回复时,原命令消息已被删除,导致message_reference: Unknown message错误,且Discord要求斜杠命令必须在3秒内完成响应,后续回复失败就触发了“The application did not respond”提示。
解决方案
核心思路是先完成斜杠命令的交互响应,再执行消息删除操作,同时区分前缀命令和斜杠命令的回复逻辑,避免依赖已删除的消息。修改后的代码如下:
# clear command @commands.hybrid_command(name="clear", with_app_command=True, description="Need to clear?") @commands.has_permissions(manage_messages=True) async def clear(self, ctx: commands.Context, limit: int = 5): # 先处理交互响应,避免超时 if ctx.interaction: # 斜杠命令:发送临时响应(仅执行者可见) await ctx.interaction.response.send_message(f'Successfully cleared {limit} messages.', ephemeral=True) # 删除指定数量的消息 await ctx.channel.purge(limit=limit) else: # 前缀命令:先删除包含命令本身的消息,再回复 await ctx.channel.purge(limit=limit+1) await ctx.reply(f'Successfully cleared {limit} messages.')
关键说明
- 斜杠命令必须通过
ctx.interaction.response.send_message完成响应,这个操作直接告知Discord命令已处理,不会依赖原命令消息的存在。 - 使用
ephemeral=True设置临时回复,避免回复被后续的purge删除,同时只有命令执行者能看到回复。 - 前缀命令保留原逻辑,先删除包含命令本身的消息,再回复。
内容的提问来源于stack exchange,提问作者CharlieChapin
相关产品推荐
相关产品推荐

