discord.py发送带文件Embed时随机触发Unknown interaction错误
解决Discord.py带文件Embed命令的Unknown Interaction错误
错误原因
你遇到的Unknown interaction(错误码10062)是因为Discord要求交互命令必须在3秒内给出响应。当你附加文件发送时,文件的读取和上传过程可能偶尔超过这个时限,导致Discord判定该交互已失效,抛出404错误。移除file参数后,消息发送速度快,不会触发超时,所以命令能正常执行。
解决方案
通过先延迟响应来延长交互的有效时间,再发送带文件的消息:
修改后的代码
@com_tree.command(name="plane", description="Generates a random plane", guild=discord.Object(id=ID)) async def random_plane(interaction): # 先发送延迟响应,告诉Discord正在处理,延长超时时间到15分钟 await interaction.response.defer() plane = random.choice(planes) # 使用上下文管理器确保文件正确读取和关闭,避免IO延迟 with open("B777.png", "rb") as f: file = discord.File(fp=f, filename="image.png") embed=discord.Embed(title=plane, url=f"https://www.google.com/search?q={plane}", colour=discord.Colour.from_str("#2FD9FF")) embed.set_image(url="attachment://image.png") # 用followup发送最终响应,因为已经defer过了 await interaction.followup.send(file=file, embed=embed)
关键改动说明
interaction.response.defer():调用这个方法会立即给Discord返回一个"正在处理"的响应,把交互的有效时间从3秒延长到15分钟,足够完成文件上传。- 上下文管理器
with open(...):确保文件被正确读取和关闭,减少潜在的IO延迟或资源泄漏问题。 interaction.followup.send():延迟响应后,必须用followup方法发送最终消息,不能再用interaction.response.send_message。
额外注意事项
- 确保图片文件
B777.png的路径正确,避免因找不到文件导致额外的延迟或错误。 - 如果你的机器人在网络环境较差的服务器上运行,可能需要优化文件读取或考虑使用外部图片链接来替代本地文件上传,进一步减少响应时间。
内容的提问来源于stack exchange,提问作者Person
相关产品推荐
相关产品推荐

