Discord.js 将用户添加到角色时缺少权限

Discord.js Missing Permissions while adding user to role

我 运行 在尝试将成员添加到角色时遇到“DiscordAPIError:缺少权限”错误。我的代码是:

const role: Role = await this.getRole(requestingUser, roleId);
const member: GuildMember = await this.getGuildMember(memberId);

await member.roles.add(role);

客户端应该有它需要的意图。这是我们用于获取调用的客户端实例的代码:

  async getClient () {
    if (!this.client) {
      // eslint-disable-next-line no-async-promise-executor
      this.client = await new Promise(async (resolve, reject) => {
        const client = new Client({
          intents: [
            Intents.FLAGS.GUILDS,
            Intents.FLAGS.GUILD_MEMBERS,
            Intents.FLAGS.GUILD_EMOJIS_AND_STICKERS,
            Intents.FLAGS.GUILD_MESSAGES
          ]
        });

        client.on('error', async (error) => {
          reject(error);
        });

        client.on('ready', async () => {
          resolve(client);
        });

        await client.login(this.botToken);
      });
    }
    return this.client;
  }

机器人确实有 'manage roles' 权限:

堆栈跟踪一旦它命中 discord.js 代码:

 DiscordAPIError: Missing Permissions 
   at RequestHandler.execute (/usr/src/app/node_modules/discord.js/src/rest/RequestHandler.js:350:13) 
   at runMicrotasks (<anonymous>) 
   at processTicksAndRejections (node:internal/process/task_queues:96:5) 
   at async RequestHandler.push (/usr/src/app/node_modules/discord.js/src/rest/RequestHandler.js:51:14) 
   at async GuildMemberRoleManager.add (/usr/src/app/node_modules/discord.js/src/managers/GuildMemberRoleManager.js:124:7)   

这是使用 discord.js 13.6.0 和 node.js 16.6.0

有什么想法吗?

如果角色高于用户或机器人的最高角色,即使您拥有 ADMINISTRATOR 权限,它基本上也是 read-only 给您的。唯一绕过这个的是所有者。向上移动机器人的角色,向下移动角色,或者进行检查并在更高时发送错误消息

if (
  role.position >= guild.me.roles.highest.position ||
  !guild.me.permissions.has("MANAGE_ROLES")
) return interaction.reply({
  content: "I don't have permissions to grant this role!",
  ephemeral: true
})