You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:57:06