因此,我正在编写一个不和谐的bot,并且有一个命令,该命令知道用户更改时是自定义状态,如果特殊状态是“ hello”,则该bot会在特定频道中发送消息,并添加用户的角色。但是代码给了我一个错误
这是代码:
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)
我只是想用角色解决错误(添加角色)
答案 0 :(得分:0)
您需要使用GuildMember对象,而不是用户对象。
来自discord.js指南
用户和GuildMember有什么区别?
许多用户对Users和GuildMembers之间的区别感到困惑。简单的答案是,用户代表特定服务器上的全局Discord用户,而GuildMember代表特定服务器上的Discord用户。例如,这意味着只有GuildMembers才能拥有权限,角色和昵称,因为所有这些都是与服务器绑定的信息,在用户所在的每台服务器上,这些信息可能都不同。
将bot.users.cache.find()
替换为msg.guild.members.cache.find()