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

求助:Python开发Discord机器人从Imgur取图发送频道遇异常

解决Discord机器人发送Imgur图片时显示网页而非直接图片的问题

问题原因

你当前使用的items[rand].link指向的是Imgur图片的网页展示地址(如https://imgur.com/XXXXXX),而非图片文件本身的直接资源URL。Discord无法将这类网页链接渲染为Embed中的图片,因此只会显示网页预览。

解决方案

需要获取Imgur返回条目的直接图片资源URL,有两种可靠方式:

1. 使用官方API提供的images属性

Imgur的gallery搜索结果中,图片类条目会包含images数组(单图场景下数组仅有一个元素),其中的link字段就是直接的图片资源地址。

2. 网页链接转换备用方案

对于少数未返回images属性的条目,可以将网页地址转换为i.imgur.com域名的资源链接(例如将https://imgur.com/abc123改为https://i.imgur.com/abc123.jpg)。

修改后的完整代码

from imgurpython import ImgurClient
import random as r
import discord
from discord import app_commands

# 确保你的Discord client已正确初始化
imgur = ImgurClient("my_client_id", "my_secret_client_id")

@client.tree.command(name="random", description="从Imgur获取随机图片")
@app_commands.describe(search="图片关键词")
async def random(interaction: discord.Interaction, search: str):
    try:
        rand = r.randint(0, 29)
        items = imgur.gallery_search(q=search, advanced=None, sort='viral', window='all', page=0)
        
        if not items:
            await interaction.response.send_message("未找到匹配的图片")
            return
        
        target_item = items[rand]
        # 优先使用官方提供的直接图片链接
        if hasattr(target_item, 'images') and target_item.images:
            direct_image_url = target_item.images[0].link
        else:
            # 网页链接转资源链接的备用方案
            direct_image_url = target_item.link.replace("imgur.com", "i.imgur.com") + ".jpg"
        
        embed = discord.Embed(title="随机图片", color=discord.Color.random())
        embed.set_image(url=direct_image_url)
        await interaction.response.send_message(embed=embed)
    except Exception as e:
        await interaction.response.send_message(f"获取图片出错:{str(e)}")

关键说明

  • 优先调用images[0].link是最稳妥的方式,能适配所有官方标记为图片的条目。
  • 添加空结果判断和异常捕获,避免因搜索无结果或API调用失败导致命令报错。
  • 备用的链接转换方式可覆盖部分特殊格式的图片(如部分动图)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:40:24