如何在Discord Embed中实现对用户或角色的@提及(ping)提醒
核心原因
Discord 为了防范垃圾提及骚扰,默认不会将 Embed 内容中的提及标记为有效提及,因此就算提及文本渲染出了浅蓝背景的正确样式,也不会触发对应提醒,你用到的author.mention写法、角色ID格式仅符合渲染规则,没有走通知触发的逻辑。
解决方案
所有方案的核心逻辑都是:发送带Embed的消息时,额外配置allowed_mentions参数,明确指定允许触发提醒的用户、角色ID列表,不需要额外发送再删除@消息。不同开发库的示例如下:
- 若使用 discord.js(v14+ 版本):
// 替换为你自己构造的Embed对象 const targetEmbed = { ... } channel.send({ embeds: [targetEmbed], allowedMentions: { // 填入需要触发提醒的用户ID数组 users: [author.id], // 填入需要触发提醒的角色ID数组 roles: ["角色ID1", "角色ID2"] } })
如果需要允许所有在内容中出现的用户、角色提及,可配置parse: ["users", "roles"],但不推荐生产环境使用,容易造成垃圾提及。
- 若使用 discord.py(v2.0+ 版本):
from discord import AllowedMentions # 替换为你自己构造的Embed对象 target_embed = ... # 构造允许提及规则 allowed_mentions = AllowedMentions( # 填入需要触发提醒的用户对象列表 users=[author], # 填入需要触发提醒的角色对象列表 roles=[target_role1, target_role2] ) await channel.send(embed=target_embed, allowed_mentions=allowed_mentions)
如果需要全量允许所有提及类型,可使用AllowedMentions.all(),同样不推荐生产环境使用。
注意事项
- 无需在消息正文
content字段重复写入提及内容,只要allowed_mentions配置正确,Embed内的提及就可以触发对应提醒。 - 之前想到的先发送@消息再删除的临时方案不要长期使用,频繁操作会触发Discord反垃圾检测,可能导致机器人被限制功能甚至封禁。
- 其他Discord开发库的逻辑完全一致,只要找到对应
allowed_mentions配置项,填入要提醒的用户、角色ID即可生效。 - 如需提及全体成员/所有人,需要机器人持有对应服务器权限,同时在
allowed_mentions中开启everyone配置才会触发提醒。
内容的提问来源于stack exchange,提问作者crw2
相关产品推荐
相关产品推荐

