我正在尝试创建一个机器人,该机器人可以为使用列出的表情符号对消息做出反应的用户添加特定角色。
使用下面的代码,我可以检查谁对消息做出了反应,也可以检查他们对哪些表情符号做出反应,但是当我尝试向他们添加角色时,错误弹出提示 user.addRole不是函数有什么办法解决这个问题?非常感谢!
创建嵌入消息以供用户做出反应的代码
let args = message.content.substring(PREFIX.length).split(" ");
if(message.content.toLowerCase() === '?roles' && message.author.id === 'adminId' && message.channel.id === 'channel id'){
const role = new Discord.MessageEmbed()
.setTitle("ROLES")
.setColor('#6a0dad')
.setDescription('? - ROLE1\n⚔️ - ROLE2\n? - ROLE3')
message.channel.send(role).then(re => {re.react('?'),re.react('⚔️'),re.react('?')});
message.awaitReactions().then(collected=>{
const reaction = collected.first();
})
}
获取响应用户并尝试添加角色的代码
const bot = new Discord.Client({ partials: ['MESSAGE', 'CHANNEL', 'REACTION'] });
bot.on('messageReactionAdd', async (reaction, user) => {
if (reaction.partial) {
try {
await reaction.fetch();
} catch (error) {
console.log('Something went wrong when fetching the message: ', error);
return;
}
}
if(reaction.message.id === 'id of that embed message sent'){
if(reaction.emoji.name === "?"){
//console.log('ROLE1');
user.addRole('id of role 1');
}
if(reaction.emoji.name === '⚔️')
//console.log('ROLE2');
user.addRole('id of role 2');
if(reaction.emoji.name === '?')
//console.log('ROLE3');
user.addRole('id of role 3');
}
});
答案 0 :(得分:1)
好像您正在尝试向User
添加角色。何时将角色添加到GuildMember
中。如您在此处看到的:messageReactionAdd返回User
。但是,用户没有.roles
,只有GuildMembers拥有。但是,您可以通过两种方式轻松获得GuildMember:
这样,您必须确保消息来自TextChannel而不是DMchannel。
if(reaction.message.type === "text") let member = reaction.message.member
;
通过这种方式,用户可以对机器人已缓存的任何消息作出反应。
let member = bot.guilds.get('<id of the server>').members.get(user.id);
然后您执行@Syntle所说的:member.roles.resolve('<id of role>');
如何获得成员的选择取决于您。
答案 1 :(得分:0)
user.addRole()
需要替换为user.roles.add
。