Discord服务器欢迎消息失效求助,附问题代码
解决Discord欢迎消息失效的问题
嘿,我帮你排查出代码里几个关键问题,这些应该就是导致欢迎消息跑不起来的原因,咱们一步步来修正:
代码里的坑点
- 未定义的
message变量:你获取服务器图标时用了message.guild.iconURL(),但guildMemberAdd事件的参数只有member,根本没有message对象,得换成member.guild.iconURL()才行 - 未声明的
guild变量:${guild.name}里的guild没定义,要改成member.guild.name才能正确获取服务器名称 avatarURL没调用:bot.user.avatarURL是个方法,得加括号调用成bot.user.avatarURL(),不然拿不到头像链接- 没检查欢迎频道是否存在:如果服务器里找不到叫
welcome的频道,代码直接会报错崩掉,得先判断频道存在再继续 - (可选)要是你用的是Discord.js v13及以上版本,
MessageEmbed已经被弃用了,得换成EmbedBuilder
修正后的完整代码
bot.on("guildMemberAdd", member => { // 先定位欢迎频道 const welcomeChannel = member.guild.channels.cache.find(channel => channel.name === 'welcome'); // 频道不存在就打个日志然后退出,避免报错 if (!welcomeChannel) { console.log("找不到名为'welcome'的频道,请检查频道名称是否正确"); return; } // 正确获取服务器图标链接 const serverIcon = member.guild.iconURL(); // 构建欢迎嵌入消息 const embed = new Discord.MessageEmbed() .setTitle("Welcome!") .setColor(3447003) .setDescription(`Welcome ${member.user.username} to ${member.guild.name}!`) .addField(':D', 'Hope you enjoy your stay!') .setFooter("© Ninjabot 2020", bot.user.avatarURL()) .setThumbnail(serverIcon) .setTimestamp(); // 适配不同Discord.js版本的消息发送格式 if (Discord.version && Discord.version.startsWith('13')) { welcomeChannel.send({ embeds: [embed] }); } else { welcomeChannel.send({ embed }); } });
额外提醒
- 确认机器人在
welcome频道里有发送消息和嵌入链接的权限,不然代码对了也发不出消息 - 可以加个调试日志,比如
console.log(已给${member.user.username}发送欢迎消息),方便你确认消息是否发送成功 - 如果还是没反应,去检查一下机器人的成员特权意图有没有开启,Discord后台的开发者面板里要把
Server Members Intent打开,不然guildMemberAdd事件可能触发不了
内容的提问来源于stack exchange,提问作者Official Spoon
相关产品推荐
相关产品推荐

