WOKCommands开发Discord TS机器人 ping斜杠命令报channel读取错误
问题根因
你将命令的slash属性配置为both,即同时支持前缀消息触发、斜杠交互触发两种模式:
- 前缀命令触发时,回调函数会接收到有效的
message对象,因此原有代码可以正常运行 - 斜杠命令触发时,不存在对应的消息实体,
message参数为undefined,调用message.channel自然会抛出读取undefined属性的报错
修复方案
WOKCommands 的命令回调参数内置了适配两种触发模式的channel字段,无需手动从message或interaction中提取,修改后代码如下:
import { Client, Message, CommandInteraction } 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, callback: async({client, message, interaction, channel}) => { const msg = await channel.send({content: `> 🏓 Pinging..`}) msg.edit({content: `> 🏓 Pong! Latency: **${client.ws.ping}ms**`}) // 处理斜杠命令响应,避免Discord提示应用未响应 if(interaction) { await interaction.deferReply({ephemeral: true}) await interaction.deleteReply() } } } as ICommand
补充说明
- 斜杠命令触发时必须对交互对象做响应,否则Discord客户端会展示「应用程序未响应」的错误提示,上述代码中通过临时回复再删除的方式规避了该问题,不会产生多余的展示内容
- 如果不需要保留先发送
Pinging再编辑的逻辑,也可以直接通过回调返回值实现效果,代码更简洁:
callback: async({client}) => { return `> 🏓 Pong! Latency: **${client.ws.ping}ms**` }
内容的提问来源于stack exchange,提问作者user15547690
相关产品推荐
相关产品推荐

