Discord.js v14欢迎消息报错:member.guild.channels.cache.fetch不是函数
解决Discord.js v14中
TypeError: member.guild.channels.cache.fetch is not a function错误 错误原因
channels.cache无fetch方法:Discord.js v14里,member.guild.channels.cache是Collection实例,仅提供缓存操作方法(如get、has);fetch是GuildChannelManager(即member.guild.channels)的方法,用于从Discord API拉取频道数据。- 重复监听事件:你的代码同时在
index.js和guildMemberAdd.js中监听guildMemberAdd事件,会导致逻辑重复执行。 - 过时的嵌入类:v14已将
MessageEmbed替换为EmbedBuilder,旧类可能引发兼容性问题。
修复步骤
1. 修正频道获取逻辑
将member.guild.channels.cache.fetch改为member.guild.channels.fetch,并将事件处理函数设为异步(因fetch是异步操作)。
2. 移除重复事件监听
删除index.js中直接定义的guildMemberAdd事件代码块,保留guildMemberAdd.js中的处理器即可。
3. 替换嵌入类
在guildMemberAdd.js中导入EmbedBuilder替代MessageEmbed。
修改后的代码
guildMemberAdd.js
const { EmbedBuilder, GuildMember } = require("discord.js") module.exports = { name: "guildMemberAdd", /** * @param {GuildMember} member */ async execute(member) { try { // 从API获取目标频道 const welcomeChannel = await member.guild.channels.fetch("1155899900161171586"); // 发送欢迎消息 await welcomeChannel.send({ embeds: [ new EmbedBuilder() .setTitle("Welcome") .setDescription(`${member.toString()} joined the \`SeaMysics\`-Server`) .setColor("#4ba511") .setTimestamp() ] }); } catch (error) { // 捕获错误便于调试 console.error("发送欢迎消息失败:", error); } } }
index.js(移除重复代码)
删除以下代码块:
client.on('guildMemberAdd', member => { member.guild.channels.cache.get('1155899900161171586').send({ embeds: [ new MessageEmbed() .setTitle("Welcome") .setDescription(`${member.toString()}` + 'joined the `SeaMysics`-Server') .setColor("#4ba511") .setTimestamp()] }); })
额外注意事项
- 确保Discord开发者门户中,机器人已开启服务器成员特权(Privileged Gateway Intents下的
Guild Members Intent),否则guildMemberAdd事件无法触发。 - 检查机器人是否拥有目标频道的发送消息和嵌入链接权限,否则消息发送会失败。
内容的提问来源于stack exchange,提问作者TheWuschelGang
相关产品推荐
相关产品推荐

