DiscordAPIError:在createOverwrite上缺少访问权限

时间:2020-10-05 23:19:02

标签: discord discord.js


使用Discord.js开发不和谐审核机器人
面临错误“ DiscordAPIError:缺少访问权限”

我的机器人用户具有除“管理员”之外的所有服务器权限,并且最高.rawPosition为18(在所有角色中最高):

user: ClientUser {
    id: 'XXXXXXXXX',
    bot: true,
    username: 'Bot',
    discriminator: '1863',
    avatar: '2e8af5cccdc5cf15a0f88818dbb044e6',
    lastMessageID: null,
    lastMessageChannelID: null,
    verified: true,
    mfaEnabled: true,
    _typing: Map {}
  },

正在尝试添加此角色(rawPosition为2):

Role {
  id: 'XXXXXXXXX',
  name: 'Mod',
  color: 0,
  hoist: false,
  rawPosition: 2,
  permissions: Permissions { bitfield: 37211712 },
  managed: false,
  mentionable: false,
  deleted: false
}

作为对此频道的覆盖权限:

CategoryChannel {
  type: 'category',
  deleted: false,
  id: 'XXXXXXXXX',
  name: 'Section Job',
  rawPosition: 6,
  parentID: null,
}

使用此代码:

await channel.createOverwrite(role, {
   VIEW_CHANNEL: true,
   READ_MESSAGES: true,
   SEND_MESSAGES: true,
   CONNECT: true
});

这是我得到的错误:

[2020/10/06 00:52:56:427] DiscordAPIError: Missing Access

我在发布之前进行了搜索。 Discord针对此特定错误提供了许多可能的解释,但都不适合我的问题:https://discordjs.guide/popular-topics/permissions-extended.html#missing-permissions

Your bot is missing the needed permission to execute this action in it's calculated base or final permissions (requirement changes based on the type of action you are trying to execute).
--> My bot has all permissions except "Administrator"
You provided an invalid permission number while trying to create overwrites. (The calculator on the apps page returns decimal values while the developer documentation lists the flags in hex. Make sure you are not mixing the two and don't use the hex prefix 0x where not applicable)
--> I give the exact same permissions, formatted exactly the same as another group, and it works
It is trying to execute an action on a guild member with a role higher than or equal to your bots highest role.
--> Not executing an action on a user, but on a group
It is trying to modify or assign a role that is higher than or equal to its highest role.
--> Bot highest role is 18, and added role rawPosition is 2
It is trying to add a managed role to a member.
--> As you can see it is not "managed"
It is trying to remove a managed role from a member.
--> Not trying to remove a role
It is trying to execute a forbidden action on the server owner.
--> Not editing a user, but a channel (and server owwner does not have this role)
It is trying to execute an action based on another unfulfilled factor (for example reserved for partnered guilds).
--> I don't understand this one but it couldn't be that
It is trying to execute an action on a voice channel without the VIEW_CHANNEL permission.
--> Not executing an action on a voice channel, but on a Category channel, and it has VIEW_CHANNEL permission

更多信息:
1 /在完全相同的上下文中,同一命令可与其他一些组一起使用,例如:

Role {
    id: 'XXXXXXXXX',
      name: 'Job',
      color: 0,
      hoist: false,
      rawPosition: 1,
      permissions: Permissions { bitfield: 37211712 },
      managed: false,
      mentionable: false,
      deleted: false
}

2 /同一命令与分配给机器人的“管理员”权限一起使用
3 /当然,不可以向漫游器添加“管理员”权限

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

好吧,后来由于不和谐的Js社区,我找到了解决方案
我忘记授予我的漫游器对该特定频道的读取权限,因此该漫游器无法授予其无权访问的频道的权限...

我刚刚添加

    permissionOverwrites: [
        {
            id: guild.me.roles.highest,
            allow: ['VIEW_CHANNEL', 'MANAGE_CHANNELS', 'MANAGE_ROLES']
        }
    ]

我的频道创建成功了,