summaryrefslogtreecommitdiff
path: root/ATRI/plugins/polaroid/data_source.py
diff options
context:
space:
mode:
Diffstat (limited to 'ATRI/plugins/polaroid/data_source.py')
-rw-r--r--ATRI/plugins/polaroid/data_source.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/ATRI/plugins/polaroid/data_source.py b/ATRI/plugins/polaroid/data_source.py
new file mode 100644
index 0000000..82e0337
--- /dev/null
+++ b/ATRI/plugins/polaroid/data_source.py
@@ -0,0 +1,60 @@
+import asyncio
+
+from ATRI.service import Service
+from ATRI.rule import is_in_service
+from ATRI.utils import request
+from ATRI.log import logger as log
+from ATRI.exceptions import RequestError, WriteError
+from .image_dealer import image_dealer
+
+
+TENCENT_AVATER_URL = "https://q1.qlogo.cn/g?b=qq&nk={user_id}&s=640"
+SOURCE_URL = "https://cdn.jsdelivr.net/gh/Kyomotoi/CDN@master/project/ATRI/"
+
+
+class Polaroid(Service):
+ def __init__(self):
+ Service.__init__(self, "拍立得", "根据头像生成拍立得风格照片!", rule=is_in_service("拍立得"))
+
+ @classmethod
+ async def _request(cls, user_id: str) -> bytes:
+ try:
+ res = await request.get(TENCENT_AVATER_URL.format(user_id=user_id))
+ except RequestError:
+ raise RequestError("Request failed!")
+ data = res.read()
+ return data
+
+ @classmethod
+ async def generate(cls, user_id: str):
+ await init_source()
+
+ user_avater = await cls._request(user_id)
+
+ result = image_dealer(user_avater, user_id)
+ return f"file:///{result}"
+
+
+from .image_dealer import TEMP_PATH, POLAROID_DIR
+
+
+async def init_source():
+ files = ["frame-0.PNG", "frame-1.PNG", "font-0.ttf"]
+
+ for i in files:
+ path = POLAROID_DIR / i
+ if not path.is_file():
+ log.warning("插件 polaroid 缺少所需资源,装载中")
+
+ url = SOURCE_URL + i
+ data = await request.get(url)
+ try:
+ with open(path, "wb") as w:
+ w.write(data.read())
+ log.info("所需资源装载完成")
+ except WriteError:
+ raise WriteError("装载资源失败")
+
+
+loop = asyncio.get_event_loop()
+loop.create_task(init_source())