如何判断Discord消息中的embed是否为链接图片预览
问题原因
你当前的代码逻辑是只要消息存在任意embed对象就执行删除,而Discord会自动为包含可解析外部链接的消息生成预览类embed,因此会触发误删。
解决方案
通过判断embed的type属性区分自动生成的预览embed和用户主动发送的自定义embed:
- 主动发送的自定义embed类型为
rich - 链接、图片、视频等自动生成的预览embed类型对应为
link、image、video等
修改后的代码如下:
@client.event async def on_message(message): # 非管控频道直接跳过逻辑 if message.channel.id not in chat_channels: return # 检查是否存在自定义富嵌入 has_rich_embed = any(embed.type == "rich" for embed in message.embeds) if has_rich_embed: await message.delete() await message.channel.send("本频道不允许发送嵌入消息")
补充说明
- 如果需要额外屏蔽特定类型的预览embed,只需在判断条件中加入对应type即可
- 若要完全禁止所有embed包括链接预览,可以保留原有逻辑,同时在服务器设置中关闭全站链接预览功能,避免用户触发误删规则
内容的提问来源于stack exchange,提问作者Ceres
相关产品推荐
相关产品推荐

