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
})
我 运行 在尝试将成员添加到角色时遇到“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
})