我有一个长时间运行的函数,需要大约 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 说“此交互失败”。我继续调试执行,然后发送消息。
为什么斜杠命令会认为命令失败,而实际上却没有,我该如何解决?
答案 0 :(得分:1)
您应该包含正在使用的斜杠命令包,但是(从命令语法)我假设您使用的是 discord-py-slash-command。
来自 package 和 discord's developer 文档:
<块引用>在这个例子中,我们直接响应交互,但是如果你想延迟响应(如果你在发送消息之前需要超过 3 秒)你可以使用 ctx.defer() 延迟响应最多 15 分钟,这将显示“机器人正在思考”消息。但是,如果您能够在三秒内回复(发送),请不要推迟回复,因为这会导致消息闪现
将 ctx.defer() 添加到命令的顶部。 如果您需要超过 15 秒的时间,您可以发送消息并稍后进行编辑。