Discord.js 如何让机器人在MessageEmbed外发送新成员@提及
实现方案
要把可点击@提及放在嵌入消息外部,只需要调整消息发送的传参逻辑,让普通消息文本承载成员提及,嵌入消息只放固定的欢迎信息即可,不需要复杂的额外配置。
关键调整点
- 把原来写在嵌入消息里的用户相关内容全部移除,避免提及被包裹在嵌入块内部
- 替换原来用来显示用户名的
member.user.tag,这个方法拿到的是纯文本格式的“用户名#编号”,根本不是可点击的@提及 - 调用频道发送方法时,同时传入普通文本内容和嵌入消息两个部分
修改完成的代码
client.on('guildMemberAdd', async(member) => { const welcomeChannel = member.guild.channels.cache.get('761871578178387989') const welcomeEmbed = new Discord.MessageEmbed() .setTitle(`:wave: 欢迎加入 **${member.guild.name}**!`) .setThumbnail(member.user.displayAvatarURL({dynamic: true, size: 512})) .addField('新人必看内容', '**服务器IP:** play.aftnetwork.net\n**商城地址:** https://store.aftnetwork.net\n\n**请务必查阅<#761874528702824469>频道的公告。**', true) .setFooter('AftNetwork') .setColor('#468DFF') // 普通文本放可点击@提及,嵌入放其他欢迎信息 welcomeChannel.send({ content: `${member},欢迎来到我们的服务器!`, embeds: [welcomeEmbed] }) })
注意事项
- 代码里直接拼接
${member}的写法,Discord.js会自动把成员对象解析成原生可点击的@身份提及,和手动写<@${member.id}>的效果完全一样,不会出现纯文本无法点击的问题 - 如果使用的是Discord.js v12及更早的旧版本,发送接口的写法略有区别,需要改成
welcomeChannel.send('@提及文本内容', { embed: welcomeEmbed }),核心逻辑不变 - 最终发送的消息结构是:消息上方的普通文本区展示可点击的@提及,下方紧跟嵌入消息块,和预期的展示效果完全匹配
内容的提问来源于stack exchange,提问作者bruhbruh
相关产品推荐
相关产品推荐

