Discord机器人新增/ping命令后部分命令失效无报错如何解决
问题根因
- Discord交互响应超时:Discord规定斜杠命令触发后必须在3秒内给出首次响应,网络波动、服务延迟超过该阈值就会触发
Unknown interaction报错,后续对该交互的所有操作都会失效。部分场景下未触发报错是因为请求刚好在超时阈值内完成 - 异步方法缺await修饰:
interaction.editReply是异步方法,现有代码未添加await关键字,会导致操作未执行完成就丢失上下文,出现无返回、无报错的静默失败 - 缺少异常捕获逻辑:命令回调函数未包裹异常捕获逻辑,运行时错误直接被吞,无法输出报错信息
修复代码
import { Client, Message, MessageEmbed, MessageActionRow, MessageButton, MessageSelectMenu } from'discord.js'; const db = require('quick.db') const moment = require('moment') import { ICommand } from "wokcommands"; export default{ name: 'ping', description: "Fetches the client latency", category: "Utilities", slash: 'both', testonly: true, /** * @param {Client} client * @param {Message} message * @param {String[]} args */ callback: async({ client, message, interaction, args }) => { try { if (message) { const msg = await message.channel.send ({content: `> 🏓 Pinging..`}) await msg.edit({content: `> 🏓 Pong! Latency: **${client.ws.ping}ms**`}) } else if (interaction) { await interaction.reply({content: `> 🏓 Pinging..`}); // 补充await修饰 await interaction.editReply({content: `> 🏓 Pong! Latency: **${client.ws.ping}ms**`}); } } catch (err) { // 捕获异常输出到控制台,方便排查 console.error('命令执行出错:', err) // 如果是交互场景且未回复,可给用户返回错误提示 if (interaction && !interaction.replied && !interaction.deferred) { await interaction.reply({ content: '命令执行失败,请稍后重试', ephemeral: true }) } } } } as ICommand
额外排查项
- 确认wokcommands配置的测试服务器ID正确,
testonly: true的命令只会在指定测试服务器同步,其他服务器无法调用 - 确认机器人邀请时已勾选
applications.commands权限,否则斜杠命令无法正常触发 - 如果命令执行逻辑超过3秒,需先调用
await interaction.deferReply()延长响应时间,最长可延至15分钟
内容的提问来源于stack exchange,提问作者user15547690
相关产品推荐
相关产品推荐

