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

Discord机器人guildMemberAdd事件触发时报Cannot read 'cache' of undefined错误

错误原因

你代码中的属性名拼写错误,discord.js v12及以上版本中,Guild实例上存储全服频道的集合属性是复数的channels,而不是你写的单数channel:

  • 第6行member.guild.roles.cache能正常运行,是因为roles本身就是Guild实例的合法属性,不存在拼写问题
  • 第15、22行你写的member.guild.channel.cache里,channel是不存在的属性,值为undefined,所以调用undefined.cache就触发了类型错误。

修复方案

  1. 把两处member.guild.channel.cache修改为member.guild.channels.cache即可解决当前报错。
  2. 建议额外补充空值判断和网关意图校验,避免后续出现其他问题:
    • 确认你的机器人在Discord开发者后台已经开启了Server Members Intent(服务器成员意图),否则guildMemberAdd事件不会被正常触发
    • 拿到频道实例后先判断是否存在,避免频道ID写错导致后续调用send方法报错
  3. 修复后的核心代码示例:
// 提前获取频道实例,两处发送可以复用,不需要重复查询
const welcomeChannel = member.guild.channels.cache.get('768526997882142743');
// 用可选链操作符避免频道不存在时报错
welcomeChannel?.send({content: `${member}`, embeds: [WelcomeEmbed]});
welcomeChannel?.send({embeds: [LogEmbed]});

额外提示:如果你使用的是discord.js v14及以上版本,原有的MessageEmbed已经被废弃,需要替换为EmbedBuilder,导入方式修改为const { EmbedBuilder } = require('discord.js');即可,该改动不影响当前报错的修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:27:04