无法添加角色,Discord.js

Posted

技术标签:

【中文标题】无法添加角色,Discord.js【英文标题】:Cannot add a role, Discord.js 【发布时间】:2020-11-30 08:26:20 【问题描述】:

所以我正在编写一个不和谐机器人,并且有一个命令,该命令知道用户何时更改是自定义状态,如果特殊状态是“你好”,机器人将在特定频道发送消息,并添加一个角色给用户。但是代码给了我一个错误

代码如下:

bot.on('presenceUpdate', (oldMember, newMember) => 
    console.log(newMember.activities[0].state)
    let guildChannels = newMember.guild.channels;

    var Cha = guildChannels.cache.find(channel => channel.name === "general")

    if(newMember.activities[0].state === "hello") 
        Cha.send('hello !')
        .then(msg => 
            
            let GradeUser = bot.users.cache.find(user => user.id == newMember.userID);
            let role = msg.guild.roles.cache.find(r => r.id == "742423876004216883");
            GradeUser.roles.add('742423876004216883')

        )
        .catch(console.error)
    

);

这是错误:

TypeError: Cannot read property 'add' of undefined
    at C:\Users\Nathan\Desktop\Dev\Effectivement Bot\index.js:320:29   
    at processTicksAndRejections (internal/process/task_queues.js:93:5)

我只是想用角色解决错误(添加角色)

【问题讨论】:

【参考方案1】:

您需要使用 GuildMember 对象,而不是用户对象。

来自 discord.js 指南

User 和 GuildMember 有什么区别?

很多用户对用户和公会成员之间的区别感到困惑。简单的答案是 User 代表全局 Discord 用户,GuildMember 代表特定服务器上的 Discord 用户。这意味着只有 GuildMembers 可以拥有权限、角色和昵称,例如,因为所有这些都是服务器绑定信息,在用户所在的每台服务器上可能会有所不同。

bot.users.cache.find() 替换为msg.guild.members.cache.find()

【讨论】:

没问题,很高兴能帮上忙

以上是关于无法添加角色,Discord.js的主要内容,如果未能解决你的问题,请参考以下文章

无法使用“角色”包向带有流星的用户添加角色

无法添加角色,Discord.js

Discord.js 使用 Express 添加角色 |无法读取未定义的属性“添加”

discord.js - 机器人不会添加角色:TypeError:无法读取未定义的属性“添加”

Windows RabbitMQ 添加用户设置角色和权限 (包含无法添加的错误处理)

无法将事件网格系统分配的托管标识添加到存储帐户角色