首页 > 解决方案 > 通过响应获取角色,无需指定 ID,以便您可以在多个服务器上使用该命令

问题描述

到目前为止,这是我的代码。但是,这只适用于一台服务器。我希望它可以在多台服务器上工作。我希望通过必须具有特定名称的角色获得 ID,但不幸的是,我只知道如何通过 ID 添加/删除角色

bot.on('message', async message => {
    let parts = message.content.split(" ");

    if(parts[0].toLocaleLowerCase() == '!rules') {
       
        if(!message.member.hasPermission('ADMINISTRATOR')) return message.channel.send('Du brauchst die Berechtigung um ein Regelwerk zu schreiben')
        if(!parts[1]) return message.channel.send('Du musst mindestens eine Regel angeben')
    
        var text = message.content.split(" ").slice(1).join(" ");
        message.delete();

        const sayembed = new Discord.MessageEmbed()
        .setColor('800000')
        .setThumbnail(`${message.guild.iconURL()}`)
        .setTitle('Regeln')
        .setDescription(text, true)
        .setFooter('Erstellt von ' + message.author.tag)
        .setTimestamp();

        let sendEmbed = await message.channel.send(sayembed)
        sendEmbed.react('✅')
        sendEmbed.react('❌')
    }
})

bot.on('messageReactionAdd', async(reaction, user, channel) => {

    if(reaction.message.partial) await reaction.message.fetch();
    if(reaction.partial) await reaction.fetch();

    if(user.bot) return;
    if(!reaction.message.guild) return;

    if(reaction.message.channel.id === '859525260835291157') {
        if(reaction.emoji.name === '✅') {
                reaction.message.guild.members.cache.get(user.id).roles.add('854784657857970176')
            }
    }
})

标签: javascriptnode.jsdiscorddiscord.js

解决方案


如果您知道角色的名称,则需要先找到该角色。guild.roles.cache返回一个集合,因此您可以使用该find()方法。find()搜索给定函数返回真实值的单个项目(即role.name您想要的那个在哪里)。

if (reaction.message.channel.id === '859525260835291157') {
  if (reaction.emoji.name === '✅') {
    let role = reaction.message.guild.roles.cache.find(role => role.name === 'Name of the role you are looking for')
    reaction.message.guild.members.cache
      .get(user.id)
      .roles.add(role);
  }
}

推荐阅读