DiscordJS 斜杠命令(slash command)场景下获取Bot延迟的实现方法问询
DiscordJS斜杠命令获取Bot延迟实现方案
实现原理
不需要依赖message事件,通过斜杠命令交互的生命周期就可以计算两类常用延迟:
- WebSocket心跳延迟:可以直接通过
client.ws.ping获取 - 接口往返延迟:计算从收到交互请求到回复消息发送完成的时间差,数据更贴近用户实际感知的延迟
完整实现步骤
步骤1:注册/ping斜杠命令
在你的斜杠命令注册逻辑中加入如下命令定义:
const { SlashCommandBuilder } = require('discord.js'); const pingCommand = new SlashCommandBuilder() .setName('ping') .setDescription('查看Bot当前延迟数据')
步骤2:编写命令处理逻辑
在interactionCreate事件的处理函数中加入对应逻辑即可:
client.on('interactionCreate', async interaction => { // 仅处理聊天输入类斜杠命令 if (!interaction.isChatInputCommand()) return; if (interaction.commandName === 'ping') { // 记录收到交互请求的时间戳 const receiveTimestamp = Date.now(); // 发送临时回复并获取发送后的消息对象 const replyMsg = await interaction.reply({ content: '正在计算延迟...', fetchReply: true, // 如果需要仅触发命令的用户可见,取消下行注释 // ephemeral: true }); // 计算往返延迟 const roundTripLatency = replyMsg.createdTimestamp - receiveTimestamp; // 获取心跳延迟 const wsLatency = client.ws.ping; // 编辑回复展示最终结果 await interaction.editReply(`🏓 延迟计算完成: - 接口往返延迟:*${roundTripLatency}ms* - WebSocket心跳延迟:*${wsLatency}ms*`); } });
注意事项
fetchReply: true为必填参数,作用是让interaction.reply返回发送成功的消息实例,才能拿到消息创建的时间戳计算往返延迟- 如果是分文件管理命令,把上述命令处理逻辑写到对应
ping命令的执行函数中即可,逻辑完全一致
内容的提问来源于stack exchange,提问作者Mat12143
相关产品推荐
相关产品推荐

