SAGIRI-kawaii / sagiri-bot

基于Graia Ariadne和Mirai的QQ机器人 SAGIRI-BOT
GNU Affero General Public License v3.0
696 stars 83 forks source link

储存 setu 图片时出错 #106

Closed nullqwertyuiop closed 3 years ago

nullqwertyuiop commented 3 years ago

报错如下:

2021-08-12 19:31:59.021 | ERROR    | SAGIRIBOT.Handler.Handlers.ImageAdderHandler:handle:57 - Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/PIL/Image.py", line 2144, in save
    format = EXTENSION[ext]
KeyError: '.mirai'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/root/sagiri-bot/SAGIRIBOT/Handler/Handlers/ImageAdderHandler.py", line 55, in handle
    await ImageAdderHandler.add_image(path, message.get(Image))
  File "/root/sagiri-bot/SAGIRIBOT/Handler/Handlers/ImageAdderHandler.py", line 88, in add_image
    img.save(save_path)
  File "/usr/local/lib/python3.8/site-packages/PIL/Image.py", line 2146, in save
    raise ValueError(f"unknown file extension: {ext}") from e
ValueError: unknown file extension: .mirai
nullqwertyuiop commented 3 years ago

仅保存单张图片时不报错,保存多张图片时报错(本 issue 内为 5 张)

nullqwertyuiop commented 3 years ago

一个构想,储存图片失败时是否可以通过图片的 MD5 值直接从腾讯的服务器上下载该图片? 例如图片 [mirai:image:{A69F32BE-D0D9-67C6-62D1-ED16406968AA}.jpg] 的 MD5 值为 A69F32BED0D967C662D1ED16406968AA,可以直接从 http://gchat.qpic.cn/gchatpic_new/0/1-1-A69F32BED0D967C662D1ED16406968AA/0 获取原图(日志只有这种类型的图片,将就下.jpg) 服务器缓存的图片自发出消息起 30 天有效,应该可以避免图片过期导致下载失败的方法 因为是用 MD5 直接从服务器下载,所以转发消息中的图片也可以(直接转发 添加setu图片[图片] 会返回错误)

Python 零基础,不知道怎么写.jpg

SAGIRI-kawaii commented 3 years ago

这他妈什么怪图(

nullqwertyuiop commented 3 years ago

随机抽取幸运日志 加的群太多的坏处(

I-love-study commented 3 years ago

可能是因为发送的图片本身是以前由mirai发送的图片(以前mirai发送的图片后缀名都是.mirai) 可以增加一个imghdr.what来判断图片的后缀名 不过,用得着重压图片吗emmm

哦,已经改了,那没事了

nullqwertyuiop commented 3 years ago

可能是因为发送的图片本身是以前由mirai发送的图片(以前mirai发送的图片后缀名都是.mirai) 可以增加一个imghdr.what来判断图片的后缀名 不过,用得着重压图片吗emmm

哦,已经改了,那没事了

诶,你用的mirai是什么版本的,能发下吗( 我这里是2.6-M2

SAGIRI-kawaii commented 3 years ago

也许已经修复过了(