
在 discord.py 中,使用 `` 语法默认不会触发通知,需显式配置 `allowed_mentions` 参数启用角色提及权限,否则仅显示文本而无实际 ping 效果。
Discord 的安全机制默认禁用消息中的提及(mentions),即使你正确写入 ,若未明确授权,该内容仅作为纯文本渲染——这就是所谓“幽灵提及”(ghost ping):角色名可见,但用户收不到通知、无高亮、不触发桌面/移动端提醒。
要真正触发角色提及,必须在发送消息时通过 allowed_mentions 参数显式声明允许提及的类型。对于角色 Ping,关键在于启用 roles=True:
@client.tree.command(name="duty", description="Ping @SASP — zapraszam na służbę (admin only)")
@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() 实例,不能只传布尔值或字典;
- 若还需同时提及用户或所有人(如 @here/@everyone),可组合设置:
allowed_mentions=discord.AllowedMentions(roles=True, users=True, everyone=True); - 该设置仅影响当前消息;每个 send_message() 调用都需单独指定;
- 确保目标角色本身未被频道禁用提及(即角色设置中“提及 @role”权限已开启,且频道未覆盖禁用);
- Bot 需拥有 Send Messages 和 Manage Messages(部分场景下)权限,但核心是 allowed_mentions 配置。
? 提示:如需动态获取角色 ID(避免硬编码),可通过 interaction.guild.get_role(role_id) 或命令参数传入 discord.Role 类型参数,提升可维护性与安全性。
正确配置后,成员将收到系统级通知,角色名高亮显示,并出现在提及列表中——真正实现高效、可靠的值班召唤。










