Discord.js 13 如何在MessageEmbed中实现提及用户功能
discord.js v13 欢迎嵌入提及用户修复方案
前置要求
首先确认你在机器人客户端初始化时已经开启GUILD_MEMBERS意图,v13版本默认关闭该意图,未开启将无法触发guildMemberAdd成员加入事件,初始化示例:
const { Client, Intents } = require('discord.js'); const bot = new Client({ intents: [ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MEMBERS ] });
修复后代码
方式1:使用MessageEmbed构造实例(推荐)
const { MessageEmbed } = require('discord.js'); bot.on('guildMemberAdd', member => { // v13所有资源集合需通过cache访问 const welcomeChannel = member.guild.channels.cache.get('替换为你的实际频道ID'); if (!welcomeChannel) return; const welcomeEmbed = new MessageEmbed() .setTitle('We got a new user') .setDescription(`Welcome ${member.toString()}`) // 可选拓展配置 .setColor('#2ecc71') .setThumbnail(member.user.displayAvatarURL({ dynamic: true, size: 256 })); // 发送嵌入需明确指定embeds数组参数 welcomeChannel.send({ embeds: [welcomeEmbed] }); });
方式2:直接传入嵌入对象
如果不需要额外的嵌入配置方法,也可以直接传入普通对象:
bot.on('guildMemberAdd', member => { const welcomeChannel = member.guild.channels.cache.get('替换为你的实际频道ID'); if (!welcomeChannel) return; welcomeChannel.send({ embeds: [{ title: 'We got a new user', description: `Welcome ${member.toString()}` }] }); });
核心改动说明
- 资源获取:v13版本中频道、角色、成员等集合类数据都需要先调用
.cache属性再执行get操作,旧版本直接channels.get()的写法已废弃 - 嵌入发送:发送嵌入消息必须将嵌入内容放到
embeds数组中作为参数属性,不能直接将嵌入属性写到send方法的参数根层级 - 用户提及:直接调用
member.toString()即可自动生成@提及格式,也可手动写为<@${member.id}>,二者效果完全一致 - 语法修复:你原有代码存在括号匹配错误,已在修复版本中修正
内容的提问来源于stack exchange,提问作者sezrial
相关产品推荐
相关产品推荐

