
在 discord.py 中,若使用 `` 格式发送消息却未触发实际通知(即“幽灵提及”),是因为默认禁用了角色提及权限;需显式配置 `allowed_mentions` 参数启用角色提及。
Discord 的安全机制默认禁止机器人随意提及角色或用户,以防止滥用和骚扰。即使你在消息中写入了 这样的格式,若未明确授权提及行为,Discord 将仅渲染为纯文本(即“幽灵提及”),不会触发通知、高亮或声音提醒。
要解决该问题,必须在调用 interaction.response.send_message() 时传入 allowed_mentions 参数,并指定允许提及的角色:
@client.tree.command(name="duty", description="ping @SASP wbijajcie na służbę (only adm)")
@discord.app_commands.checks.has_permissions(administrator=True)
async def nagana(interaction: discord.Interaction):
await interaction.response.send_message(
f"<@&1064986634963140628>, Zapraszam na służbę",
allowed_mentions=discord.AllowedMentions(roles=True),
)✅ 关键点说明:
- allowed_mentions=discord.AllowedMentions(roles=True) 明确启用对角色的提及;
- 若还需提及特定用户或所有人(如 @everyone),可扩展为:
AllowedMentions(roles=True, users=True, everyone=True); - 注意:机器人必须拥有对应频道的「提及 @everyone/@here/角色」权限(在频道权限设置中检查);
- allowed_mentions 必须作为关键字参数传入 send_message(),不可设在 response.defer() 或其他阶段。
⚠️ 常见误区:
- 错误地将 allowed_mentions 应用于 interaction.followup.send() 而非初始响应(若已 defer,则 followup 也需单独设置);
- 使用硬编码 role ID 但未确认该角色存在于目标服务器,或机器人无查看该角色的权限(如角色被隐藏、机器人权限等级低于该角色);
- 忘记在 Bot OAuth2 设置中勾选 mentions 权限(虽非必需,但建议启用完整权限范围)。
总结:幽灵提及本质是 Discord 的安全限制,而非代码错误。只需通过 allowed_mentions 主动声明意图,即可让提及真正生效——这是 Discord.py v2.0+ 中标准且必要的实践。










