You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 09:15:03