discord.js机器人开发提示找不到member与channel名称报错求助
问题原因与修复方案
核心报错原因
- 你在
ready事件的回调函数中直接使用了member变量,但这个变量没有经过任何声明、赋值操作,当前作用域下不存在该变量,因此直接抛出「找不到名称'member'」的错误 - 你贴出的代码中
find回调的channel属于合法的局部参数,不会报未定义错误,如果你的运行环境还提示找不到channel,检查本地是不是漏写了这个回调参数
其他存在的代码问题
- 无效导入:你导入的
Guild、Message、GuildMember在现有代码中完全没有用到,可以直接删除避免冗余 - 逻辑冗余:你将
find的返回结果转布尔值再判断是否等于true的操作完全多余,可以直接判断查找结果是否存在 - 逻辑目标不匹配:你原本的逻辑看起来是想检查机器人所在服务器有没有名为
welcome的频道,完全不需要用到GuildMember类型的member对象,直接从客户端实例遍历所有加入的服务器即可
修复后的完整代码
import DiscordJS, { Intents } from 'discord.js' import dotenv from 'dotenv' dotenv.config() const client = new DiscordJS.Client({ intents: [ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MESSAGE_REACTIONS, Intents.FLAGS.GUILD_MEMBERS ] }) client.on('ready', ()=>{ console.log('Santa is coming') // 遍历所有加入的服务器,判断是否存在名为welcome的频道 const hasWelcomeChannel = client.guilds.cache.some(guild => guild.channels.cache.find(channel => channel.name === 'welcome') ) if (hasWelcomeChannel){ console.log('Found it!') } }) client.on('messageCreate', (message) =>{ if (message.content == 'santa?'){ message.react('🎅') message.reply({ content: "HO, HO, HO, I'll be coming soon!" }) } }) client.login(process.env.TOKEN)
补充说明
如果你实际需要的是监听新成员加入事件、给新成员发欢迎消息,那你应该监听guildMemberAdd事件,在该事件的回调参数里才能拿到合法的member对象,不要在ready事件里写相关逻辑。
内容的提问来源于stack exchange,提问作者IDEADZOMBIE
相关产品推荐
相关产品推荐

