discord.py 斜杠命令 - 长时间运行的函数上的“此交互失败”

时间:2021-07-13 13:38:14

标签: python discord discord.py

我有一个长时间运行的函数,需要大约 20 秒左右才能完成。函数完成后,将结果作为消息发送给 Discord。

如果我通过输入一个常用命令(没有斜杠命令)来运行这个函数,它会完全正常运行,并且我会看到发送到 Discord 的结果。

但是如果我通过斜杠命令调用该函数,Discord 会告诉我“此交互失败”,然后在我看到消息中的结果后不久。因此该函数完全正常工作,但斜线命令似乎认为它们失败了。

为了测试这个,我得到了一个基本函数:

@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.send(content=f"I got you, you said {optone}!")

如果我通过斜杠命令调用它,没问题。然后我在 await ctx.send... 上放置一个断点并再次运行该命令。 Discord 说“此交互失败”。我继续调试执行,然后发送消息。

为什么斜杠命令会认为命令失败,而实际上却没有,我该如何解决?

1 个答案:

答案 0 :(得分:1)

您应该包含正在使用的斜杠命令包,但是(从命令语法)我假设您使用的是 discord-py-slash-command

来自 packagediscord's developer 文档:

<块引用>

在这个例子中,我们直接响应交互,但是如果你想延迟响应(如果你在发送消息之前需要超过 3 秒)你可以使用 ctx.defer() 延迟响应最多 15 分钟,这将显示“机器人正在思考”消息。但是,如果您能够在三秒内回复(发送),请不要推迟回复,因为这会导致消息闪现

将 ctx.defer() 添加到命令的顶部。 如果您需要超过 15 秒的时间,您可以发送消息并稍后进行编辑。