Discord.js成员加入事件嵌入式消息如何在用户上方添加Ping
Discord.js 新成员欢迎嵌入消息无法实现用户@Ping的问题修复
问题现象
开发Discord机器人时,在guildMemberAdd事件处理逻辑中编写欢迎功能,程序运行无控制台报错,嵌入式消息可正常发送,但无法在对应位置渲染出可点击的用户@提及效果,也无法触发给新成员的Ping通知。
对应原始问题代码:
client.on("guildMemberAdd", (member) => { let embed = new Discord.MessageEmbed(); member.roles.add(member.guild.roles.cache.find((role) => role.name === "Member")); let mention = `<@${member}>`; embed.setColor("#2465ff"); embed.setDescription("."); embed.setFooter("We now have " + member.guild.memberCount + " members!"); embed.setTimestamp(); member.guild.channels.cache.get("822024147202080771").send(embed); });
问题根因
- 提及字符串生成逻辑错误:模板字符串直接插值
member对象,会被解析为[object Object],生成的字符串不符合Discord用户提及的格式要求,无法被平台识别。 - 定义的
mention变量未被实际使用:embed的描述字段仅设置了占位符".",没有放入任何提及相关的文本内容。 - 缺少embed消息的提及权限配置:这是实现该功能时最容易踩的规则类坑——Discord默认会屏蔽嵌入式消息内部的提及渲染与Ping触发逻辑,即使格式正确,不手动放开权限的前提下,embed内的@内容仅会显示为纯文本字符串,无法渲染为可点击的高亮提及。
修复步骤
- 修正提及字符串的生成方式:改为提取
member对象的用户ID生成合法提及串,替换原来错误的写法:
// 原错误写法:let mention = `<@${member}>`; const mention = `<@${member.id}>`;
- 将提及文本嵌入到embed的描述位置,替换原占位内容:
embed.setDescription(`欢迎 ${mention} 加入大家庭!`);
- 发送消息时手动配置允许提及的范围,放开embed内对新成员的提及权限。根据使用的Discord.js版本调整对应写法:
- Discord.js v13及以上版本:
member.guild.channels.cache.get("822024147202080771").send({ embeds: [embed], allowedMentions: { users: [member.id] } }); - Discord.js v12版本:
member.guild.channels.cache.get("822024147202080771").send({ embed: embed, allowedMentions: { users: [member.id] } });
修复完成后,embed内对应位置的提及就会正常渲染为可点击的用户卡片,同时能触发给新成员的Ping通知。
内容的提问来源于stack exchange,提问作者OliPlays
相关产品推荐
相关产品推荐

