zpr 修复一些BUG,优化删除本地图片方法和错误流程 (#95)

修了一些bug
修复消息被删除后提示出错导致无法发送图片的情况
代码变更
优化错误处理流程
通过直接删除zpr图片文件夹达到清理图片文件的效果 `rmtree`
This commit is contained in:
瓜瓜吖 2022-10-17 10:37:24 +08:00 committed by GitHub
parent 02ee1fc6cc
commit 3fd126f5ca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,13 +1,19 @@
import contextlib
import shutil
from os import makedirs
from os.path import exists, dirname, abspath
from pagermaid.listener import listener
from pagermaid.single_utils import safe_remove
from pagermaid.enums import Client, Message, AsyncClient
from pyrogram.types import InputMediaPhoto
async def get_result(message, request, r18=0):
# r18: 0为非 R181为 R182为混合在库中的分类不等同于作品本身的 R18 标识)
# num: 图片的数量
# size: 返回图片的尺寸质量
zpr_path = f"{dirname(abspath(__file__))}/zpr/"
if not exists(zpr_path):
makedirs(zpr_path)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.42'
}
@ -22,21 +28,18 @@ async def get_result(message, request, r18=0):
except Exception:
return None, None, "解析JSON出错。"
setuList = [] # 发送
delList = [] # 删除
await message.edit("努力获取中 。。。")
for i in range(5):
urls = result[i]['urls'][size].replace('i.pixiv.re', 'img.misaka.gay')
imgname = (f"{result[i]['pid']}_{i}.jpg")
try:
img = await request.get(urls, headers=headers, timeout=10)
with open(imgname, mode="wb") as f:
with open(f"{zpr_path}{imgname}", mode="wb") as f:
f.write(img.content)
except Exception:
return None, None, "连接二次元出错。。。"
setuList.append(InputMediaPhoto(imgname))
delList.append(imgname)
return setuList, delList, des if setuList else None
setuList.append(InputMediaPhoto(f"{zpr_path}{imgname}"))
return setuList, zpr_path, des if setuList else None
@listener(command="zpr",
description="随机获取一组涩涩纸片人。",
@ -45,20 +48,14 @@ async def zpr(client: Client, message: Message, request: AsyncClient):
arguments = message.arguments.upper().strip()
message = await message.edit("正在前往二次元。。。")
try:
photoList, delList, des = await get_result(message, request, r18=1 if arguments == "R18" else 0)
except Exception as e:
return await message.edit(f"{des}\n\n错误信息:\n`{e}`")
if not photoList:
return await message.edit(des)
try:
await message.edit("传送中。。。")
photoList, zpr_path, des = await get_result(message, request, r18=1 if arguments == "R18" else 0)
if not photoList:
shutil.rmtree(zpr_path)
return await message.edit(des)
with contextlib.suppress(Exception):
message = await message.edit("传送中。。。")
await client.send_media_group(message.chat.id, photoList)
except Exception as e:
await client.send_message(message.chat.id, f"{des}\n\n错误信息:\n`{e}`")
try:
for i in range(5):
if delList[i]:
safe_remove(delList[i])
except:
pass
shutil.rmtree(zpr_path)
await message.safe_delete()