
使用 discord.py 创建 slash 命令时,默认响应会显示“用户使用了 /command”提示;本文介绍通过临时响应(ephemeral)配合频道消息发送,彻底隐藏调用者身份,实现真正静默的告白类命令。
使用 discord.py 创建 slash 命令时,默认响应会显示“用户使用了 /command”提示;本文介绍通过临时响应(ephemeral)配合频道消息发送,彻底隐藏调用者身份,实现真正静默的告白类命令。
在 Discord.py 中,当你使用 interaction.response.send_message() 发送常规响应时,Discord 会自动在消息上方添加一条系统提示(如 “@User used /confess”),这对需要匿名性的功能(如告白、投票、反馈等)会造成隐私泄露。解决该问题的核心思路是:分离“确认响应”与“内容展示”——即向用户返回仅其可见的临时提示,再由 Bot 主动向频道发送真正的消息,从而绕过系统自动标注机制。
正确做法如下:
async def confess(inter: discord.Interaction, *, confession: str):
# 第一步:立即发送仅调用者可见的临时响应(无历史记录、不提及用户)
await inter.response.send_message("✅ 已提交,他人不会知道是谁发送的!", ephemeral=True)
# 第二步:向当前频道发送匿名内容(不带任何用户引用)
await inter.channel.send(confession)⚠️ 注意事项:
- ephemeral=True 必须在 inter.response.send_message() 的首次响应中使用,且只能调用一次;后续若需再次响应,须改用 followup.send()。
- inter.channel.send() 发送的消息完全不关联原始调用者,不会出现 @mention 或系统提示,真正实现匿名。
- 确保 Bot 在目标频道具有 Send Messages 权限;若在私信(DM)中调用该命令,inter.channel 将为 None,需额外判断处理(例如:if inter.channel is not None:)。
- 若需进一步增强匿名性(如屏蔽用户名、添加时间戳或分隔线),可扩展消息格式:
await inter.channel.send( f"? 匿名告白:{confession}\n⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯\n{discord.utils.format_dt(discord.utils.utcnow(), 'R')}" )
总结:通过 ephemeral=True + inter.channel.send() 的组合,你既能给予用户即时反馈,又能确保内容以完全中立、无指向的方式呈现——这是构建隐私敏感型交互命令(如 confession、suggestion、report)的标准实践。

















