Discord机器人在线10-15分钟后离线崩溃问题求助
Discord机器人频繁离线崩溃(错误10062: Unknown interaction)解决思路
错误本质分析
discord.errors.NotFound: 404 Not Found (error code: 10062): Unknown interaction 核心问题是机器人尝试响应一个已过期或被Discord服务器判定为无效的交互请求。常见触发场景包括:
- 交互响应超时(Discord要求交互必须在3秒内响应),超时后机器人仍尝试发送结果
- 机器人重启后,残留的未处理交互请求被继续执行,导致响应不存在的会话
- 代码中存在重复响应同一个交互的逻辑
针对性修复方案
1. 处理耗时操作的交互超时
如果breedings.py或bot.py中有数据库查询、外部API调用等耗时操作,必须使用延迟响应避免超时:
# 先发送延迟响应,告知Discord机器人正在处理 await interaction.response.defer() # 执行耗时操作(比如繁殖逻辑计算、数据库读写) # ... # 操作完成后发送最终结果 await interaction.followup.send("繁殖结果已生成!")
2. 清理待处理交互任务
在on_disconnect事件中加入逻辑,清空所有未完成的交互任务,避免重启后响应失效会话:
# 提前在bot实例中维护一个跟踪交互任务的列表 bot.interaction_tasks = [] @bot.event async def on_disconnect(): # 取消所有未完成的交互任务 for task in bot.interaction_tasks: if not task.done(): task.cancel() bot.interaction_tasks.clear()
(注:处理交互时,需将耗时任务添加到interaction_tasks列表中)
3. 防止重复响应交互
检查代码中是否存在多次调用交互响应方法的情况,每个交互仅允许一次初始响应,后续只能用跟进消息。可通过标记避免重复:
async def handle_breeding_interaction(interaction): # 检查是否已响应过该交互 if getattr(interaction, '_has_responded', False): return interaction._has_responded = True # 执行交互处理逻辑 # ...
4. 优化重连机制
启用Discord.py内置的自动重连功能,避免手动重启导致的交互残留问题:
# 使用官方推荐的重连参数启动机器人 bot.run(YOUR_BOT_TOKEN, reconnect=True)
5. 确保交互命令同步正确
在机器人启动时强制同步slash命令和交互组件,避免因注册不一致导致的无效交互:
@bot.event async def on_ready(): await bot.tree.sync() print(f"机器人已登录:{bot.user.name}")
额外排查方向
- 查看机器人完整日志,确认崩溃前是否存在内存泄漏、数据库连接异常等间接问题
- 检查Discord开发者面板中机器人的权限配置,确保拥有处理交互、发送消息的完整权限
内容的提问来源于stack exchange,提问作者José Roberto
相关产品推荐
相关产品推荐

