discord.js获取interaction.reply()延迟 解决ping命令返回负值问题
你得到负数结果的核心原因是运行机器人的设备系统时间与Discord服务器时间不同步:interaction.createdTimestamp是Discord服务器侧生成的交互创建时间戳,而Date.now()取的是你本地设备的时间,若本地时间比Discord服务器时间慢,两者相减就会出现负数。
方案1:同步系统时间(临时修复)
直接同步你运行机器人设备的系统时间到标准NTP时间,就可以解决负数问题,但该方法依然依赖时间同步状态,可靠性不高。
方案2:通过交互回复时间差计算(更稳定,无需依赖时间同步)
先给交互返回一个临时占位响应,再通过「响应完成时间 - 收到交互的时间」计算实际延迟,同时可以直接获取机器人到Discord网关的延迟,参考代码如下(discord.js v14 可用):
// 收到斜杠命令交互后的处理逻辑 const recvTime = Date.now(); // 先发送临时回复,满足Discord要求的3秒内响应规则 await interaction.reply("计算延迟中..."); // 计算交互延迟:发送完回复的时间减去收到交互的时间 const interactionLatency = Date.now() - recvTime; // 网关延迟:discord.js内置的ws网关心跳延迟 const gatewayLatency = interaction.client.ws.ping; // 编辑回复展示最终结果 await interaction.editReply(`🏓 Pong! - 交互响应延迟:${interactionLatency}ms - 网关连接延迟:${gatewayLatency}ms`);
如果一定要用interaction.createdTimestamp计算,你可以预先计算本地时间和Discord服务器的固定偏移量,计算时校正偏移即可:
// 全局存储时间偏移量,可每次收到交互时更新 const timeOffset = Date.now() - interaction.createdTimestamp; // 校正后的延迟 const latency = Date.now() - interaction.createdTimestamp - timeOffset;
内容的提问来源于stack exchange,提问作者MegaMix_Craft
相关产品推荐
相关产品推荐

