从SQLite3数据库获取图片在Discord Embed中无法显示的问题
Discord嵌入图片不显示的排查与解决
核心问题分析
- 文件名不匹配:代码中创建
discord.File时指定的文件名是picture.png,但嵌入里引用的是oc_picture.png,Discord无法找到对应附件,导致图片无法渲染。 - 未传递文件对象:仅返回Embed对象,发送消息时没有附带创建的
discord.File,Discord服务器接收不到图片数据,自然无法显示。
修复后的完整代码
def init_embed(title, description, colour, picture): # 创建discord.File对象,确保文件名与后续引用一致 file = discord.File(BytesIO(picture), filename='picture.png') embed = discord.Embed(title=title, description=description, colour=colour) # 使用和File对象完全一致的文件名引用附件 embed.set_image(url="attachment://picture.png") # 同时返回embed和file对象,发送时需一起传递 return embed, file
发送消息的正确用法
调用函数后,必须在发送消息时同时传入Embed和File对象:
# 示例:通过命令上下文发送 embed, file = init_embed("示例标题", "示例描述", discord.Colour.blue(), picture_data) await ctx.send(embed=embed, files=[file]) # 或通过频道对象发送 # await channel.send(embed=embed, files=[file])
额外验证步骤
- 确认从SQLite3获取的
picture是完整的图片二进制数据:可以先写入本地文件验证是否能正常打开with open("test_verify.png", "wb") as f: f.write(picture) - 确保图片格式为Discord支持的类型(PNG、JPG等),如果是其他格式,需同步修改
filename的后缀(如picture.jpg)并保持引用一致。
内容的提问来源于stack exchange,提问作者Chris Ze Third
相关产品推荐
相关产品推荐

