You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 07:45:34