Node.js 尝试赋予角色时,discord.js无法读取未定义的属性add for(设l=0;l

Node.js 尝试赋予角色时,discord.js无法读取未定义的属性add for(设l=0;l,node.js,npm,discord.js,Node.js,Npm,Discord.js,好吧,那么: client.config.topMemberCount可以读取,值为5 topMemberList是一个数组,其中包含5个用户的ID,采用字符串格式(例如:`223212312432123') 当我运行它时,它返回TypeError:cannotreadproperty'add'of undefined,这很奇怪,因为如果我将roleMember和roleToGive输出到控制台,它显然会输出目标角色或成员的雪花 如果(topMemberList[l]==null)继续和如果(

好吧,那么:

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


编辑:discord.js在12.5.1版上

方法
.fetch()
是异步的,并返回一个
承诺
,而不是
GuildMember
角色
对象。这是因为DJ获取这些值需要花费一些时间,并且您只需要在真正获取已获取的成员/角色后才使用它(目前您正试图在真正获取这些值之前使用这些值,这就是为什么错误告诉您
roleMember.roles
未定义的原因)。请查看discord.js文档中的
.fetch()

解决方案可能是使用
async/await
,或者使用
.then()
。我将在下面演示后者,因为没有提供
函数
声明(不用说,您只需要在
函数
之前添加
async
,在
函数
之前添加
等待
行)

for(设l=0;l{
message.guild.roles.fetch('791984048851124234')。然后(roleToGift=>{
roleMember.roles.add(roleToGive);
}).catch(err=>console.log(“找不到角色;错误:“+err.stack”);
}).catch(err=>console.log(“找不到成员;错误:“+err.stack”);
}
我还添加了
.catch()
语句,这些语句应该能够显示代码这一部分中的任何其他错误(如果上述修复不足以使代码正常工作)

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);
}
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));
}