Discord机器人调用Unsplash随机图片时重复显示同一图片的问题求助
解决Discord机器人重复返回同一张Unsplash随机图片的问题
我来帮你搞定这个问题!你遇到的情况其实是Discord的资源缓存机制在搞鬼——当你每次发送的图片URL完全一样时,Discord会认为这是同一个资源,直接返回它缓存下来的那张图,而不会重新去Unsplash请求新的随机图片。
要解决这个问题很简单,只需要在Unsplash的随机图片URL后面加一个唯一的随机参数,让每次请求的URL看起来不一样,这样Discord就会认为是新资源,不会用缓存了。常见的做法是加时间戳或者随机数,比如:
import time @bot.command() async def image(ctx): # 用当前时间戳作为唯一参数,确保每次URL都不同 timestamp = int(time.time()) embed = discord.Embed(title="Image", color=0x4797ff) # 在URL后拼接参数,Unsplash会忽略这个参数但Discord会识别为新资源 embed.set_image(url=f'https://source.unsplash.com/random?t={timestamp}') embed.set_footer(text="") await ctx.send(embed=embed)
为什么这样有效?因为Unsplash的source.unsplash.com/random接口会忽略URL里的额外参数,仍然返回随机图片,但Discord看到的是不同的URL,就会每次都去拉取新的内容,而不是用缓存的旧图。
你也可以用随机整数代替时间戳(比如random.randint(1, 1000000)),效果是一样的。试试上面的代码,每次执行!image命令应该就能得到不同的随机图片了~
内容的提问来源于stack exchange,提问作者Issa Al-Salmi




