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

discord.py斜杠命令运行长耗时函数时提示"This interaction failed"问题求解

问题根因

Discord 斜杠命令基于交互协议设计,所有交互必须在触发后3秒内得到首次响应,否则Discord会直接判定该交互执行失败,展示"This interaction failed"提示。
你遇到的两种场景触发的是同一个问题:

  • 20秒长耗时函数:3秒内没有给Discord返回任何响应,触发超时判定
  • 断点调试:打断点后程序暂停运行,超过3秒没有返回响应,同样触发超时
    普通非斜杠前缀命令没有这套交互超时规则,只要最终消息能发出去就不会有报错提示,所以运行正常。
修复方案

只需要在斜杠命令函数最开始先调用defer()方法延迟响应即可,该操作会告知Discord当前命令需要更长时间处理,会先给用户展示「Bot is thinking...」的加载状态,同时将响应时限延长到15分钟,完全覆盖20秒的耗时需求。
等你的长耗时逻辑执行完成后,再正常调用send()方法返回最终结果即可。

代码示例

@slash.slash(name="test",
             guild_ids=[123,456],
             description="This is just a test command, nothing more.",
             options=[
                 create_option(
                     name="optone",
                     description="This is the first option we have.",
                     option_type=3,
                     required=False
                 )
             ])
async def test(ctx, optone: str):
    # 先延迟响应,必须放在所有耗时逻辑前
    await ctx.defer()
    # 这里放你的20秒长耗时逻辑
    # long_time_task()
    # 耗时逻辑执行完后发送最终结果
    await ctx.send(content=f"I got you, you said {optone}!")

如果需要最终返回的结果仅命令触发者可见,可以在defer时添加参数:await ctx.defer(ephemeral=True),后续send的内容也会仅该用户可见。


内容的提问来源于stack exchange,提问作者August Williams

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 03:21:02