
在使用 discord.py 创建 slash 命令时,若仅插入 `` 格式字符串,默认不会触发实际通知(即“幽灵提及”),需显式启用 `allowed_mentions` 并配置 `roles=true` 才能真正@角色并推送提醒。
Discord 的安全机制默认禁用所有自动提及(mentions),以防止滥用或误触发通知。即使你在消息中写入了 这样的角色 ID 格式,Discord API 也不会将其解析为有效提及,除非你明确告知客户端:“允许提及角色”。
✅ 正确做法是:在 send_message() 调用中传入 allowed_mentions 参数,并使用 discord.AllowedMentions(roles=True) 启用角色提及权限。
以下是修正后的完整示例代码:
@client.tree.command(name="duty", description="Ping @SASP — zapraszam na służbę (tylko dla adminów)")
@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 必须作为关键字参数传入 send_message(),不能设置在 InteractionResponse 全局或命令装饰器中;
- 若你还希望同时支持用户提及(如 @user)或所有人提及(@everyone),可扩展为:
allowed_mentions=discord.AllowedMentions(roles=True, users=True, everyone=True)
- 确保该角色本身未被频道禁言(即角色权限中未勾选 “提及/提及所有人” 的拒绝项),否则即使代码正确,Discord 服务端也会静默丢弃提及;
- Slash 命令响应必须在 3 秒内完成(defer() 或 send_message()),因此无需额外异步等待,直接发送即可。
? 小结:Discord.py 不会自动“信任”你的提及字符串——它需要你主动声明“我有意提及这些内容”。allowed_mentions 就是这个信任声明的唯一方式。掌握它,就能让机器人真正“叫到人”。










