You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord机器人配置反应角色遇Missing Permissions错误求助

Discord机器人反应角色功能触发Missing Permissions错误(代码50013)解决方案

错误信息

DiscordAPIError: Missing Permissions
    at RequestHandler.execute (C:\Users\mreap\Desktop\orbit project, etc\box militia\node_modules\discord.js\src\rest\RequestHandler.js:350:13)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async RequestHandler.push (C:\Users\mreap\Desktop\orbit project, etc\box militia\node_modules\discord.js\src\rest\RequestHandler.js:51:14)
    at async GuildMemberRoleManager.add (C:\Users\mreap\Desktop\orbit project, etc\box militia\node_modules\discord.js\src\managers\GuildMemberRoleManager.js:124:7) {
  method: 'put',
  path: '/guilds/1015814032088891462/members/1173097778843496620/roles/1015880336665743382',  
  code: 50013,
  httpStatus: 403,
  requestData: { json: undefined, files: [] }
}

原代码

const Discord = require('discord.js');
const client = new Discord.Client({ intents: ["GUILDS", "GUILD_MESSAGES", "GUILD_MESSAGE_REACTIONS"] });

client.on('ready', () => {
  console.log(`Logged in as ${client.user.tag}`);
});

client.on('messageCreate', async (message) => {
  if (message.content === '!reaction_role') {
    const reactionMessage = await message.channel.send('React to this message to get the role!');
    reactionMessage.react('✅');
  }
});

client.on('messageReactionAdd', async (reaction, user) => {
  if (reaction.emoji.name === '✅') {
    const guild = reaction.message.guild;
    const member = guild.members.cache.get(user.id);
    let role = guild.roles.cache.find(role => role.name === 'test'); // Replace YOUR_ROLE_NAME with the name of the role you want to assign
    member.roles.add(role.id);
  }
});

client.login('token');

问题排查与解决方案

1. 补充必要的Intents与开启特权意图

  • 代码缺失GUILD_MEMBERS意图,同时需要开启PARTIALS支持旧消息的反应事件,修改客户端初始化配置:
    const client = new Discord.Client({ 
      intents: ["GUILDS", "GUILD_MESSAGES", "GUILD_MESSAGE_REACTIONS", "GUILD_MEMBERS"],
      partials: ['MESSAGE', 'REACTION', 'USER']
    });
    
  • 前往Discord开发者门户,进入你的机器人应用:
    • 切换到Privileged Gateway Intents标签
    • 开启Server Members Intent和Message Content Intent(因使用了messageCreate事件)

2. 处理成员缓存缺失问题

guild.members.cache.get(user.id)可能无法获取成员(缓存未加载),改用异步fetch方法:

const member = await guild.members.fetch(user.id);

3. 添加错误捕获与边界检查

避免因角色不存在、成员获取失败导致崩溃,同时输出详细错误信息:

client.on('messageReactionAdd', async (reaction, user) => {
  // 忽略机器人自身的反应
  if (user.bot) return;
  if (reaction.emoji.name === '✅') {
    const guild = reaction.message.guild;
    if (!guild) return;
    
    try {
      const member = await guild.members.fetch(user.id);
      const role = guild.roles.cache.find(role => role.name === 'test');
      
      if (!role) {
        console.error('目标角色不存在');
        return;
      }
      if (!member) {
        console.error('无法获取成员信息');
        return;
      }
      
      await member.roles.add(role);
      console.log(`已为${user.tag}添加角色${role.name}`);
    } catch (err) {
      console.error('添加角色失败:', err);
    }
  }
});

4. 再次确认角色排序与权限

  • 进入服务器设置→角色,确保机器人的角色位置高于test角色
  • 检查机器人是否被频道级权限限制(即使有管理员权限,个别频道可能设置了权限覆盖)

修改后的完整代码

const Discord = require('discord.js');
const client = new Discord.Client({ 
  intents: ["GUILDS", "GUILD_MESSAGES", "GUILD_MESSAGE_REACTIONS", "GUILD_MEMBERS"],
  partials: ['MESSAGE', 'REACTION', 'USER']
});

client.on('ready', () => {
  console.log(`Logged in as ${client.user.tag}`);
});

client.on('messageCreate', async (message) => {
  if (message.content === '!reaction_role') {
    const reactionMessage = await message.channel.send('React to this message to get the role!');
    reactionMessage.react('✅');
  }
});

client.on('messageReactionAdd', async (reaction, user) => {
  if (user.bot) return;
  if (reaction.emoji.name === '✅') {
    const guild = reaction.message.guild;
    if (!guild) return;
    
    try {
      const member = await guild.members.fetch(user.id);
      const role = guild.roles.cache.find(role => role.name === 'test');
      
      if (!role) {
        console.error('错误:目标角色不存在');
        return;
      }
      if (!member) {
        console.error('错误:无法获取成员信息');
        return;
      }
      
      await member.roles.add(role);
      console.log(`成功为${user.tag}添加角色:${role.name}`);
    } catch (err) {
      console.error('添加角色时出错:', err);
    }
  }
});

client.login('你的机器人Token');

内容的提问来源于stack exchange,提问作者XMr_ReaperX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 23:00:12