Discord js TypeError:无法读取属性成员

时间:2020-04-13 05:25:27

标签: discord.js

你好,我有这个代码,

user = message.guild.members.fetch(id2).then((use,err)

我有这个错误

TypeError:无法读取null的属性“ members”

请你能帮我吗?

谢谢

2 个答案:

答案 0 :(得分:1)

message.guild未初始化。您可以在使用之前检查它是否为空,例如

if(message.guild){
    user = message.guild.members.fetch(id2).then((use,err) ...
}else{
   //do something when it is not initialized
}

答案 1 :(得分:0)

发生错误是因为message对象引用了作为DM接收的消息。由于DM的工作方式,此类消息没有guildmember属性(它们保留为null)。

为避免这种情况,您应该对直接消息进行稍微不同的处理。最简单,最常用的方法是完全停止直接消息运行消息事件代码。这可以通过添加

来完成
if (message.channel.type === 'dm') return;

在活动的最开始。

由于这使得无法在DM中启动命令,即使它们不需要在行会中执行即可工作(例如ping命令),这也不是您想要的。在这种情况下,您应该实施一种方法来确定是否有人允许在DM中尝试运行的命令。具体实现方式取决于命令处理的实现方式,但以下代码段是基本原理。

client.on('message', message => {
  if (message.author.bot || !message.startsWith(prefix)) return;
  const args = message.content.slice(prefix.length).split(/ /g);
  const command = args.shift().toLowerCase();

  if (command === 'memberinfo') {
    if (message.channel.type === 'dm') return message.reply('this command cannot be run in DMs.');
    // Actual command code
  }
});