你好,我有这个代码,
user = message.guild.members.fetch(id2).then((use,err)
我有这个错误
TypeError:无法读取null的属性“ members”
请你能帮我吗?
谢谢
答案 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的工作方式,此类消息没有guild
或member
属性(它们保留为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
}
});