Discord机器人ping命令返回nanms 无法正确输出延迟数值
问题原因
- 作用域错误:当前ping命令写在Cog类中(从方法的
self参数可判断),但代码直接调用了全局作用域的client实例,没有使用Cog绑定的机器人实例,导致读取的latency是未初始化的空值,计算后就会返回nan。 - 心跳未完成:机器人启动后需要先完成和网关的首次心跳交互,才会生成有效的latency数值,若在机器人刚启动、还没完成首次心跳时就调用ping命令,也会返回nan。
修复方案
首先确保你在Cog初始化时已经将运行的机器人实例绑定到了self属性,比如self.bot = bot,之后把代码里的client.latency替换成self.bot.latency即可。
修复后的参考代码如下:
# To ping the bot (latency) @commands.command() async def ping(self, ctx): try: # 替换为Cog绑定的bot实例读取延迟 latency = round(self.bot.latency * 1000, 1) await ctx.send(f"Pong! Latency: {latency}ms") except: await ctx.send(f"Error getting latency")
如果调整后刚启动时还是偶尔返回nan,等待1-2分钟等机器人完成所有网关交互后再测试即可,属于正常现象。
内容的提问来源于stack exchange,提问作者user13685226
相关产品推荐
相关产品推荐

