Discord机器人开发:Cannot read property 'channels' of undefined报错及!daftar功能问题
报错核心触发原因
- 代码中导入的
GuildMember是discord.js提供的类构造器,并非当前指令运行环境下的实际用户实例。 - 直接在类构造器上访问
GuildMember.guild这类仅属于实例的属性时,取值永远为undefined,后续链式读取.channels属性就会触发Cannot read property 'channels' of undefined错误。 - 现有代码存在冗余逻辑:初始化时查找的
role变量在全流程中没有被引用。
修复实现
直接复用指令上下文已经携带的实例对象替换错误的类静态访问逻辑:
- 服务器上下文对象直接使用交互自带的
message.guild获取 - 当前触发指令的成员信息直接使用交互自带的
message.member获取 - 发送欢迎消息时增加频道存在性判断,避免频道ID失效时触发新的报错
修复后可运行代码
module.exports = { name: 'daftar', description: "This is for add roles to a member", execute(message, args) { if (message.member.roles.cache.some(r => r.name === "Members")) { message.channel.send('Kamu sudah menjadi MEMBER Di grup ini'); } else { message.member.roles.add('817360044622217276'); message.member.roles.remove('817965925122048010'); message.channel.send('Baiklah silahkan menikmati Server'); const welcomeChannel = message.guild.channels.cache.get('817957997312737290'); if (welcomeChannel) { welcomeChannel.send(`Selamat Datang <@${message.member.id}>`); } } } }
注意:无需在代码开头手动导入
GuildMember类,所有实例数据均已通过message上下文携带,手动引入类构造器只会增加无意义的代码量。
内容的提问来源于stack exchange,提问作者Yudhistira。
相关产品推荐
相关产品推荐

