Discord.js斜杠命令发送含Ping延迟Embed报错排查
报错根因
两个报错对应代码里的三处逻辑问题:
interaction.reply()默认不会返回已发送的消息对象,原代码.then((msg) => {})中拿到的msg实际为undefined,读取msg.createdTimestamp直接触发类型错误- 原代码中
message.createdTimestamp引用的message变量从未定义,斜杠命令场景下,交互发起时间直接从入参interaction的createdTimestamp属性获取即可,不存在独立的message对象 - 混用
async/await和.then()链式写法导致执行时序错乱:await interaction.reply()执行完成后已经完成首次回复,.then()内的逻辑重复触发交互响应,就会抛出交互已回复的错误。
修复后可直接运行的代码
const { SlashCommandBuilder } = require('@discordjs/builders'); const { MessageEmbed } = require('discord.js'); module.exports = { data: new SlashCommandBuilder() .setName('ping') .setDescription('查看机器人响应延迟'), async execute(interaction) { // 发送过渡提示时开启fetchReply: true,才能拿到发送成功的消息对象 const replyMsg = await interaction.reply({ content: "正在计算延迟...", fetchReply: true }); // 计算耗时:回复消息创建时间 - 交互发起时间 const latency = replyMsg.createdTimestamp - interaction.createdTimestamp; const pingEmbed = new MessageEmbed() .setColor('#0000ff') .setTitle('Pong! :ping_pong:') .addField("响应耗时", `${latency}ms`) .addField("WebSocket延迟", `${interaction.client.ws.ping}ms`) .setThumbnail("https://78.media.tumblr.com/be43242341a7be9d50bb2ff8965abf61/tumblr_o1ximcnp1I1qf84u9o1_500.gif"); // 编辑原回复,替换为embed内容,同时清空原过渡文字 await interaction.editReply({ content: "", embeds: [pingEmbed] }); }, };
代码优化建议
- 同一段异步逻辑里统一使用
async/await写法,不要和.then()链式调用混用,避免时序问题,代码可读性也更高 - 如果不需要显示"正在计算延迟"的过渡提示,可以直接计算延迟后一次性返回embed,省掉二次编辑的步骤,代码更简洁:
async execute(interaction) { const latency = Date.now() - interaction.createdTimestamp; const pingEmbed = new MessageEmbed() .setColor('#0000ff') .setTitle('Pong! :ping_pong:') .addField("响应耗时", `${latency}ms`) .addField("WebSocket延迟", `${interaction.client.ws.ping}ms`) .setThumbnail("https://78.media.tumblr.com/be43242341a7be9d50bb2ff8965abf61/tumblr_o1ximcnp1I1qf84u9o1_500.gif"); await interaction.reply({ embeds: [pingEmbed] }); }
- 颜色值推荐使用
#RRGGBB格式的十六进制字符串,比0x前缀的数值写法可读性更高 - 编辑已有交互回复时,记得把不需要保留的原字段(比如之前发的过渡文字content)显式设为空,否则旧内容会和新内容一起展示
- 除了端到端的响应耗时,建议额外展示WebSocket连接延迟,也就是
interaction.client.ws.ping,返回的延迟信息更全面
内容的提问来源于stack exchange,提问作者Twentdoggo
相关产品推荐
相关产品推荐

