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

Discord.py如何检测发送的附件是否为图片?

检测Discord附件是否为图片的可行方法

首先你写的代码存在两个问题:

  1. 语法错误:if 后不能加 =,正确判断格式为 if 条件:
  2. Discord.py 的 Attachment 对象没有直接的 .image 属性,该写法本身不成立

以下是几种可靠的检测方法:

方法1:通过文件后缀名判断

提取附件文件名的后缀,匹配常见图片格式:

allowed_extensions = ('.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp')
attachment = ctx.message.attachments[0]
if attachment.filename.lower().endswith(allowed_extensions):
    # 是图片,执行操作
    pass

优点:简单高效;缺点:可能被伪造后缀名的文件绕过

方法2:通过MIME类型判断

Discord附件对象自带content_type属性,图片的MIME类型以image/开头:

attachment = ctx.message.attachments[0]
if attachment.content_type and attachment.content_type.startswith('image/'):
    # 是图片,执行操作
    pass

优点:比后缀名判断更准确;缺点:极少数情况下MIME类型可能被篡改

方法3:通过图片库验证有效性(最可靠)

下载附件后用PIL库(Pillow)尝试打开,能正常打开的即为有效图片:

from PIL import Image
import io

attachment = ctx.message.attachments[0]
# 下载附件内容到内存
file_data = await attachment.read()
try:
    # 尝试打开并验证图片完整性
    with Image.open(io.BytesIO(file_data)) as img:
        img.verify()
        # 是有效图片,执行操作
        pass
except (IOError, SyntaxError):
    # 不是有效图片
    pass

优点:能准确识别真实图片,避免伪造;缺点:需额外安装Pillow库,且下载文件会占用少量资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:55:27