【问题标题】:Discord.js v13 Cannot read properties of undefined (reading 'roles')Discord.js v13 无法读取未定义的属性(读取“角色”)
【发布时间】:2022-01-13 22:02:24
【问题描述】:

我正在尝试创建一个命令,如果您说带有 use 参数的斜杠命令,那么它将赋予该用户角色。即使我知道该成员存在,我仍然会收到此错误。

TypeError: Cannot read properties of undefined (reading 'roles')

我的代码:

const { commandName, options } = interaction;
const user = options.getUser('user');

if (commandName == 'givebetatester'){
     console.log(user);
     const role = interaction.guild.roles.cache.get('917609388154425374');
     interaction.reply('Success');

     user.member.roles.add(role);
}

我已经仔细检查过我有角色并且用户存在,但我现在不知道出了什么问题。任何帮助将不胜感激。

【问题讨论】:

    标签: node.js discord.js roles


    【解决方案1】:

    您只能从 GuildMember 转到 User 而不能反过来。您正在尝试使用 user.member 从用户转到 GuildMember

    要么更改您的斜杠命令选项以接受成员而不是用户

    或者确保您启用了 Guild Member 的 Intent 并使用 User id 获取 GuildMember 对象:

    // Async/Await
    const member = await interaction.guild.members.fetch(user.id);
    

    【讨论】:

      【解决方案2】:

      已修复!我从用户切换到可提及的,如果有人尝试输入角色以外的内容,这可能会中断,但它可以解决问题。

      代码:

      const { commandName, options } = interaction;
      const user = options.getMentionable('user');
      
      if (commandName == 'givebetatester'){
           const role = interaction.guild.roles.cache.get('917609388154425374');
           user.roles.add(role);
      
           interaction.reply('<a:ncheckmark:917609071195074600>');
      }
      

      【讨论】: