【问题标题】:discord.js Cannot read property add of undefined when trying to give rolediscord.js 尝试赋予角色时无法读取未定义的属性添加
【发布时间】:2021-04-07 01:24:10
【问题描述】:
for (let l = 0; l < client.config.topMemberCount; l++) {
    if (topMemberList[l] === null) continue;
    if (String(topMemberList[l]) === '261292565247252480') continue;
    let roleMember = message.guild.members.fetch(topMemberList[l]);
    console.log(roleMember);
    let roleToGive = message.guild.roles.fetch('791984048851124234');
    roleMember.roles.add(roleToGive);
}

好的,那么:

  • client.config.topMemberCount可以读取,值为5
  • topMemberList 是一个数组,其中包含 5 个用户的 ID,采用字符串格式(例如:`223212312432123'
  • 当我运行它时,它返回 TypeError: Cannot read property 'add' of undefined,这很奇怪,因为如果我将 roleMember 和 roleToGive 输出到控制台,它显然会输出目标角色或成员的雪花。
  • if (topMemberList[l] === null) continue;if (String(topMemberList[l]) === '261292565247252480') continue; 只是一些不将角色赋予我自己或 null 对象的措施,如果数组在某些时候包含 null。

我做错了什么? :(


编辑: discord.js 版本为 12.5.1

【问题讨论】:

    标签: node.js npm discord.js


    【解决方案1】:

    .fetch() 方法是异步的,它返回一个Promise,而不是GuildMemberRole 对象。这是因为 DJS 会花费一些时间来获取这些值,并且您只需要在真正获取后才使用获取的成员/角色(当前您正在尝试在它们真正被获取之前使用这些值,这这就是错误告诉您roleMember.roles 未定义的原因)。在 discord.js 文档中查看 example 中的 .fetch() 以亲自查看。

    解决方案是使用async/await,或使用.then()。我将在下面演示后者,因为未提供您的 function 声明(不用说,您只需在 functionawait 之前添加 async 在您的 .fetch() 行之前)。

    for (let l = 0; l < client.config.topMemberCount; l++) {
        if (topMemberList[l] === null) continue;
        if (String(topMemberList[l]) === '261292565247252480') continue;
        
        message.guild.members.fetch(topMemberList[l]).then(roleMember => {
            
            message.guild.roles.fetch('791984048851124234').then(roleToGive => {
                roleMember.roles.add(roleToGive);
            }).catch(err => console.log("Role could not be found; Error: " + err.stack));
    
        }).catch(err => console.log("Member could not be found; Error: " + err.stack));
    }
    

    我还添加了.catch() 语句,它应该能够向您显示这部分代码中的任何其他错误(如果上述修复不足以使您的代码正常工作)。

    【讨论】:

      猜你喜欢
      • 2021-08-10
      • 2019-01-25
      • 2021-11-01
      • 1970-01-01
      • 2021-04-07
      • 2022-01-13
      • 2020-12-29
      • 2021-09-29
      • 2021-07-24
      相关资源
      最近更新 更多