You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Disnake中如何删除临时(ephemeral)交互响应?

无法删除Discord机器人发送的临时(Ephemeral)消息

我开发了一个支持用户通过斜杠命令玩游戏的Discord机器人,机器人会发送临时(ephemeral)消息。为保持界面整洁,我希望在特定场景下(比如用户数分钟未响应)删除这些响应,但目前无法成功删除临时消息。

发送临时消息的代码:

await inter.send(file=file, embed=embed, components=components, ephemeral=True)

当ephemeral=False时,用下面的代码可以成功删除机器人的响应:

await inter.delete_original_message()

但当ephemeral=True时,执行上述删除代码会抛出以下错误:

Traceback (most recent call last):                                                                                                                       
File "/usr/local/lib/python3.8/site-packages/disnake/ext/commands/slash_core.py", line 680, in invoke                                                  
await call_param_func(self.callback, inter, self.cog, **kwargs)                                                                                      
File "/usr/local/lib/python3.8/site-packages/disnake/ext/commands/params.py", line 817, in call_param_func                                             
return await maybe_coroutine(safe_call, function, **kwargs)                                                                                          
File "/usr/local/lib/python3.8/site-packages/disnake/utils.py", line 580, in maybe_coroutine                                                           
return await value                                                                                                                                  
File "/code/cogs/game.py", line 271, in game                                                                                                 
await game(                                                                                                                                    
File "/code/cogs/game.py", line 189, in game                                                                                                
await inter.delete_original_message()                                                                                                                
File "/usr/local/lib/python3.8/site-packages/disnake/interactions/base.py", line 526, in delete_original_message                                       
await deleter                                                                                                                                        
File "/usr/local/lib/python3.8/site-packages/disnake/webhook/async_.py", line 222, in request                                                          
raise NotFound(response, data)                                                                                                                       
disnake.errors.NotFound: 404 Not Found (error code: 10008): Unknown Message

另外,尝试设置临时消息的delete_after属性时,也出现了错误:

disnake.ext.commands.errors.CommandInvokeError: Command raised an exception: ValueError: ephemeral messages can not be deleted via endpoints

我猜测这说明Discord不允许通过任何API端点删除临时消息,想确认是否存在其他删除临时消息的方法?


结论

你的猜测完全正确——Discord官方不支持通过API删除临时消息。

临时消息的设计逻辑就是仅对目标用户可见,且Discord的API规则明确禁止通过端点操作删除这类消息,这也是你设置delete_after时直接抛出ValueError的核心原因。

替代方案

如果需要实现“超时清理”的界面整洁效果,可以考虑两种思路:

  • 改用普通消息+权限控制:放弃ephemeral=True,发送普通消息后,通过设置消息的权限(仅目标用户可见)模拟临时消息的效果,之后就能正常使用delete_original_message()或delete_after参数来定时删除消息。
  • 引导用户手动关闭:在临时消息中添加提示,告知用户可以点击消息右上角的关闭按钮手动清除这条临时消息。

内容的提问来源于stack exchange,提问作者Nik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 21:45:35