【问题标题】:Cannot read property 'first' of null无法读取 null 的属性“第一个”
【发布时间】:2020-07-23 23:22:09
【问题描述】:

所以我目前正在制作一个不和谐的机器人,所以每当有人输入!true @USER [Location] 时,它都会给@USER 发一条消息,添加一个角色,然后使用以下代码将用户昵称为 [Location]:

const mention = message.mentions.members.first();

msg = message.content.toLowerCase();

if (msg.startsWith(prefix)){
if(message.channel.id === '12345'){

    if (msg.startsWith (prefix + "true")){
        if(!message.member.hasPermission("MANAGE_NICKNAMES")) return message.reply("You have no permission!");
        if (mention == null) { return; }
        let args = message.content.split(" ").slice(2);
        if ((mention.displayName + " " + args.join(" ")).length > 32) return message.channel.send("The nickname exceeds 32 characters")
        if(mention.roles.cache.has('1234567890')){
        message.reply("User is already accepted.")
        } else {
        mention.roles.add('1234567890').then(() => mention.setNickname(mention.displayName+" "+args.join('  ')))
        .catch((e) => {
            console.log('handle error here: ', e.message)
        })            
     }
}}}

但是,大多数情况下,它会返回 Cannot read property 'first' of null,并且不会更改用户的昵称(仅角色和 DM)。我的代码有什么问题吗?谢谢。

【问题讨论】:

    标签: javascript node.js discord discord.js


    【解决方案1】:
    const mention = message.mentions.members.first();
    

    在上述代码中,message.mentions.members 为 null,因此您无法访问 null 对象中的属性(此处为 first)。

    罪魁祸首可能是您在某处设置了members 属性,而不是您在此处提供的代码。做一些调试和console.log,你就会解决这个问题。

    【讨论】:

    • @Prism,这不是错误。它是null。很可能存在message.mentions.members 为空的情况。如果您希望我们在这方面提供帮助,我建议您使用您的代码编辑这篇文章,或者更好地解决这个问题并问另一个问题。
    【解决方案2】:

    您收到错误是因为您无法获得 null 的 first。最好在命令中检查提及,像这样。

    if (msg.startsWith(prefix)) {
        if (message.channel.id === '12345') {
            if (msg.startsWith(prefix + 'true')) {
                if (args.length < 0) return message.reply('PLS mention a member or write his ID');
                const mention = message.mentions.members.first() || message.guild.members.cache.get(args[0]);
                if (!mention) return message.reply('Can`t find a member');
                msg = message.content.toLowerCase();
                if (!message.member.hasPermission('MANAGE_NICKNAMES')) return message.reply('You have no permission!');
                if (mention == null) {
                    return;
                }
                let args = message.content.split(' ').slice(2);
                if ((mention.displayName + ' ' + args.join(' ')).length > 32) return message.channel.send('The nickname exceeds 32 characters');
                if (mention.roles.cache.has('1234567890')) {
                    message.reply('User is already accepted.');
                } else {
                    mention.roles
                        .add('1234567890')
                        .then(() => mention.setNickname(mention.displayName + ' ' + args.join('  ')))
                        .catch(e => {
                            console.log('handle error here: ', e.message);
                        });
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-29
      • 2021-07-09
      • 2016-11-24
      • 2012-04-29
      相关资源
      最近更新 更多