使用discord.py开发斜杠命令时应用无响应但仍输出结果
问题原因与解决方案
核心问题
Discord的斜杠命令有3秒响应超时限制,你的代码仅通过ctx.channel.send()发送消息,没有向Discord平台发送命令已被接收/处理的响应信号,导致客户端判定“应用无响应”,但机器人实际能正常发送消息(只是跳过了Discord要求的斜杠命令响应流程)。
解决方法
斜杠命令必须使用Discord指定的响应方法来完成流程,有两种常用方式:
方式1:直接发送响应消息(适合快速完成的命令)
用ctx.response.send_message()替代ctx.channel.send(),这是斜杠命令的标准响应方式,会同时完成平台的响应确认和消息发送:
@bot.tree.command(name="ping", description="Check bot's latency.") async def ping(ctx): await ctx.response.send_message(f"``Pong! {round(bot.latency * 1000)}ms`` 📡")
方式2:先延迟响应再发送结果(适合需要耗时操作的命令)
如果命令处理时间可能超过3秒,先调用defer()告知Discord“正在处理”,避免超时提示,之后用followup.send()发送最终结果:
@bot.tree.command(name="ping", description="Check bot's latency.") async def ping(ctx): # 发送延迟响应,阻止超时提示 await ctx.response.defer() # 这里可以添加耗时操作(比如数据查询、计算等) latency = round(bot.latency * 1000) # 发送后续结果消息 await ctx.followup.send(f"``Pong! {latency}ms`` 📡")
为什么原代码会出现异常?
ctx.channel.send()只是普通的频道消息发送方法,不属于Discord斜杠命令的响应流程范畴。Discord没收到命令处理的确认信号,就会在客户端显示“应用无响应”,但机器人的消息仍能正常发送到频道中。
内容的提问来源于stack exchange,提问作者BPPL 0806
相关产品推荐
相关产品推荐

