使用 discord.py 让机器人响应图像

bra*_*one 3 python bots discord.py

使用 discord.py 进行机器人编码的新手。正如标题所暗示的那样,我希望有人能告诉我如何让机器人响应某人发送的图像,无论是从互联网粘贴还是从他们的计算机上传。

Tri*_*sto 10

当然,您可以使用 .attachments

@client.event
async def on_message(message):
  print(message.attachments)
Run Code Online (Sandbox Code Playgroud)

对于来自外部链接的图片,您可以执行以下操作

  pic_ext = ['.jpg','.png','.jpeg']
  for ext in pic_ext:
    if message.content.endswith(ext):
      #do stuff
Run Code Online (Sandbox Code Playgroud)

.attachments 还返回一个带有字典的列表

[{'width': 1200, 'url': 'https://cdn.discordapp.com/attachments/421005768494678016/486646740993179688/1200px-Greek_uc_Omega.svg.png', 'size': 27042, 'proxy_url': 'https://media.discordapp.net/attachments/421005768494678016/486646740993179688/1200px-Greek_uc_Omega.svg.png', 'id': '486646740993179688', 'height': 1200, 'filename': '1200px-Greek_uc_Omega.svg.png'}]
Run Code Online (Sandbox Code Playgroud)

所以要从中访问任何值(在本例中为它的 url),您可以执行以下操作

message.attachments[0]['url']
Run Code Online (Sandbox Code Playgroud)

字典代码示例

  try:
    print(message.attachments[0]['url'])
  except IndexError:
    pass
Run Code Online (Sandbox Code Playgroud)

网址代码示例

pic_ext = ['.jpg','.png','.jpeg']
@bot.event
async def on_message(message):
  for ext in pic_ext:
    if message.content.endswith(ext):
      print("test")
Run Code Online (Sandbox Code Playgroud)

  • 是的,您可以使用 try/except 捕获错误。我已将示例添加到我的答案中 (3认同)
  • 所以我尝试了这个语句:if message.attachments[0]['url']: 好消息是程序可以工作并且它检测到图像已发送并回复我想要的消息。但它抛出了这个错误:第 67 行,在 on_message if message.attachments[0]['url']: IndexError: list index out of range (2认同)