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

Discord机器人开发遇Cannot read property 'id' of undefined报错 如何实现撤反应移除角色

你遇到的报错如下:

Cannot read property 'id' of undefined

报错原因&修复点

  • 1 反应收集器的配置参数传参错误:createReactionCollector仅接受2个参数,你将dispose配置拆分到了第三个独立对象,导致配置未生效,无法正确触发反应移除事件
  • 2 反应移除的事件监听写法错误:你错误调用了collector.dispose()方法,正确的监听反应移除事件应该用collector.on('remove', 回调函数),你之前的错误写法导致回调接收的user参数为undefined,调用user.id就会触发对应报错
  • 3 额外优化点:
    • 过滤函数排除机器人自身触发的反应,避免不必要的逻辑执行
    • 成员获取优先用fetch拉取而不是直接读缓存,避免缓存中不存在对应成员时报错

修正后完整代码

const msg = message.channel.send(gvg).then(async msg => {
  await msg.react('🟢'); 
  await msg.react('🟠');
  await msg.react('🔴');
  await msg.react('⚙️');

  // 过滤逻辑新增排除机器人
  const filter = (reaction, user) => !user.bot && ['🟢', '🟠', '🔴', '⚙️'].includes(reaction.emoji.name);
  
  // 所有配置合并到第二个参数,开启dispose
  const collector = msg.createReactionCollector(filter, { time: 30000, dispose: true });
  
  collector.on('collect', async (reaction, user) => {
    // 用fetch拉取成员,避免缓存缺失
    const member = await message.guild.members.fetch(user.id);
    if (reaction.emoji.name === '🟢' ) { 
      member.roles.add('845380394513596446');
    } 

    if (reaction.emoji.name === '🟠') {
      member.roles.add('845380453597708299')
    }

    if (reaction.emoji.name === '🔴') { 
      member.roles.add('845380484964024330')
    }

    if (reaction.emoji.name === '⚙️') {
      member.roles.remove('845380484964024330')
      member.roles.remove('845380453597708299')
      member.roles.remove('845380394513596446')
    }
    
  });

  // 正确监听remove事件处理撤回反应的逻辑
  collector.on('remove', async (reaction, user) => {
    const member = await message.guild.members.fetch(user.id);
    if (reaction.emoji.name === '🟢' ) { 
      member.roles.remove('845380394513596446');
    } 

    if (reaction.emoji.name === '🟠') {
      member.roles.remove('845380453597708299')
    }

    if (reaction.emoji.name === '🔴') { 
      member.roles.remove('845380484964024330')
    }
  });
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 19:36:03