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

如何解决Discord机器人随机截图命令中图片无法显示的问题

问题原因

prnt.sc提供的短链是网页地址,而非直接的图片资源链接。Discord在渲染Embed时,只会抓取直接指向图片文件的URL(比如以.png/.jpg结尾的链接),无法从网页中提取图片内容,所以导致图片无法显示。

解决方案

需要先请求prnt.sc的页面,解析出页面里的真实图片URL,再将这个URL用于Embed的图片设置。

首先安装依赖库(如果未安装):

pip install requests beautifulsoup4

修改后的代码:

import random
import string
import requests
from bs4 import BeautifulSoup
import discord

if message.content.startswith(prefix + "rss"):
    # 生成随机6位短链后缀
    rss_suffix = ''.join(random.choices(string.ascii_lowercase + string.digits, k=6))
    prnt_url = f"https://prnt.sc/{rss_suffix}"
    
    try:
        # 模拟浏览器请求页面,避免被反爬拦截
        response = requests.get(prnt_url, headers={"User-Agent": "Mozilla/5.0"})
        response.raise_for_status()
        
        # 解析页面提取真实图片地址
        soup = BeautifulSoup(response.text, 'html.parser')
        img_tag = soup.find("img", class_="no-click screenshot-image")
        
        if not img_tag or not img_tag.get("src"):
            await message.channel.send("未找到有效截图,请重试!")
            return
        
        img_url = img_tag["src"]
        # 处理相对路径的图片地址
        if not img_url.startswith("http"):
            img_url = f"https:{img_url}"
        
        # 生成Embed并发送
        embed = discord.Embed(title="随机截图", color=0x109319)
        embed.set_image(url=img_url)
        await message.channel.send(embed=embed)
    
    except requests.exceptions.RequestException as e:
        await message.channel.send(f"获取截图失败:{str(e)}")
注意事项
  • 加入User-Agent是为了绕过prnt.sc的基础反爬机制,模拟正常浏览器访问。
  • 部分短链可能对应已删除或不存在的截图,所以需要添加异常处理和空值检查,避免机器人运行报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:10:27