有没有办法检查发送的附件是 discord.py 中的图像还是视频?

Is there a way to check if the attachment send is either a image or video in discord.py?

我正在制作一个将 media.xxxx.net 转换为 cdn.xxxx.com 链接的机器人。这对视频非常有效,但作为副作用,它也会转换图像,这是一种不良影响。

一种方法会明确告诉机器人要转换哪些格式(mp4、MOV 等)并保留其他格式,但考虑到视频文件的格式数量,我认为这是必要的,但我不能来用任何其他方式。

这是我写的代码

if message.content.startswith('https://media') and not message.content.endswith('jpg') and not message.content.endswith('png') and not message.content.endswith('gif') and not message.content.endswith('webp'):
     message.content.replace('media', 'cdn').replace('net', 'com') 
     await message.delete()

在这里,我试图让机器人忽略最常见的图片格式,但随着我添加越来越多的格式,它看起来一团糟。

不是检查 URL 是否以图像格式结尾,而是检查 URL 是否以视频格式结尾。

message_text = message.content
if message_text.find('https://media.discordapp.net') != -1 and message_text.find('.mp4') != -1:
     new_url = message_text.replace('https://media.discordapp.net','https://cdn.discordapp.com')
     await message.channel.send(new_url) 
     await message.delete()

您可以使用 content_type attribute 检查附件的文件类型,如果它们是图像,您可以告诉它忽略它。

for att in message.attachements:
    if att.content_type.startswith("video"):
        new_url = message.content.replace('media', 'cdn').replace('net', 'com')
        await message.channel.send(new_url)
        await message.delete()

为了让我的代码更简洁,我制作了一个列表并在其中添加了所有可能的格式,它与我以前的方法基本相同 LOGIC 但它更简洁更易于管理。

formats=['png', 'jpg', 'gif' , 'webp', 'jpeg', 'jpg' , 'jpeg' ,'jfif' ,'pjpeg' , 'pjp', 'svg', 'bmp']
msg = message.content

if message.content.startswith('https://media'): 
     if any(word in msg for word in formats):
      return

因此它将检查 link 中的单词,如果找到任何一种格式(jpg、png),它将 return 而不是 运行 下一个一段代码