当不应该在 discord.js 命令处理程序中未定义时,无法读取未定义的属性

Posted

技术标签:

【中文标题】当不应该在 discord.js 命令处理程序中未定义时,无法读取未定义的属性【英文标题】:Cannot read properties of undefined when it shouldn't be undefined in discord.js command handler 【发布时间】:2021-12-06 09:41:51 【问题描述】:

我用一个简单的“ping”命令创建了一个小型命令处理程序。但是,尝试访问 message.channel 显示未定义。这是为什么呢?

./index.js

//Discord, fs, prefix, client etc. declarations

client.commands = new Collection()

const files = fs.readdirSync("./commands").filter(file => file.endsWith(".js")

for (const file of files) 
  const command = require(`./commands/$file`)
  client.commands.set(command.name, command)


client.on("messageCreate", message => 
  const [command, ...args] = message.content.slice(prefix.length).split(/ +/g)
  if (client.commands.has(command) 
    client.commands.get(command).execute(message, client, args)
  
)

client.login(/*token*/)

./commands/ping.js

module.exports = 
  name: "ping",
  description: "Make me say pong",
  async execute(client, message, args) 
    message.channel.send("Pong!")
  

【问题讨论】:

【参考方案1】:

虽然Message.channel 可能有效,但message 不是Message 的实例。它实际上是Client 的一个实例。参数的顺序总是很重要,将它们放在错误的顺序可能会引发 TypeErrors。这里有1个简单的解决方案

按正确的顺序排列参数!您可以更改执行或声明

client.commands.get(command).execute(client, message, args)

这真的很常见,而且发生的不仅仅是向频道发送消息

【讨论】:

以上是关于当不应该在 discord.js 命令处理程序中未定义时,无法读取未定义的属性的主要内容,如果未能解决你的问题,请参考以下文章

排行榜命令中未定义的用户名 [ quick.db / discord.js ]

Discord.JS 命令处理程序子文件夹

Discord.js 命令处理程序机器人不响应

Discord.js:如何发送消息并从中收集反应

discord.js 命令处理程序错误

斜杠命令处理程序中的 Discord.js v13 TypeError