11# -*-coding: utf-8 -*-
22import asyncio
33import aiohttp
4+ from zipfile import ZipFile
45import re
6+ from io import BytesIO
57from typing import List
68from os import getenv
79from sys import argv
1214from _utils import *
1315from discord import update_hook
1416
15- github_download_url_regex = re .compile (
16- r"https://github\.com/(?P<author>[a-zA-Z0-9-]+)/(?P<repo>[a-zA-Z0-9\.\-\_]*)/releases/download/(?P<version>[a-zA-Z\.0-9]+)/(?P<filename>.*)\.zip"
17- )
18-
19-
2017async def batch_github_plugin_info (
2118 info : P , tags : ETagsType , github_token = None , webhook_url : str | None = None
2219) -> P :
@@ -68,14 +65,29 @@ async def batch_github_plugin_info(
6865 browser_download_url or assets [0 ]["browser_download_url" ]
6966 )
7067
71- if webhook_url :
72- await send_notification (
73- info ,
74- clean ( latest_rel [ "tag_name" ], "v" ),
75- latest_rel ,
76- webhook_url ,
68+ latest_ver = clean ( latest_rel [ "tag_name" ], "v" )
69+ if version_tuple ( info [ version ]) != version_tuple ( latest_ver ):
70+ tqdm . write ( f"Update detected: { info [ plugin_name ] } { latest_ver } " )
71+
72+ metadata = await get_plugin_dot_json (
73+ info [ url_download ], session = session
7774 )
78- info [version ] = clean (latest_rel ["tag_name" ], "v" )
75+ for key in (
76+ description ,
77+ author ,
78+ language_name ,
79+ website ,
80+ ):
81+ info [key ] = metadata [key ]
82+
83+ if webhook_url :
84+ await send_notification (
85+ info ,
86+ latest_ver ,
87+ latest_rel ,
88+ webhook_url ,
89+ )
90+ info [version ] = latest_ver
7991
8092 tags [info [id_name ]] = res .headers .get (etag , "" )
8193
@@ -86,6 +98,21 @@ async def batch_github_plugin_info(
8698 return info
8799
88100
101+ async def get_plugin_dot_json (download_url : str , * , session : aiohttp .ClientSession ):
102+ async with session .get (download_url ) as res :
103+ data = await res .read ()
104+
105+ with ZipFile (BytesIO (data )) as zip :
106+ for fileinfo in zip .filelist :
107+ if not fileinfo .filename .endswith ("plugin.json" ):
108+ continue
109+
110+ with zip .open (fileinfo , "r" ) as file :
111+ return json .loads (file .read ())
112+
113+ raise ValueError (f"plugin.json file not found. Download Url: { download_url } " )
114+
115+
89116async def batch_plugin_infos (
90117 plugin_infos : Ps , tags : ETagsType , github_token , webhook_url : str | None = None
91118) -> Ps :
@@ -114,17 +141,15 @@ def remove_unused_etags(plugin_infos: PluginsType, etags: ETagsType) -> ETagsTyp
114141
115142
116143async def send_notification (
117- info : PluginType , latest_ver , release , webhook_url : str | None = None
144+ info : PluginType , latest_ver : str , release , webhook_url : str | None = None
118145) -> None :
119146 if not webhook_url :
120147 return
121148
122- if version_tuple (info [version ]) != version_tuple (latest_ver ):
123- tqdm .write (f"Update detected: { info [plugin_name ]} { latest_ver } " )
124- try :
125- await update_hook (webhook_url , info , latest_ver , release )
126- except Exception as e :
127- tqdm .write (str (e ))
149+ try :
150+ await update_hook (webhook_url , info , latest_ver , release )
151+ except Exception as e :
152+ tqdm .write (str (e ))
128153
129154
130155async def main ():
0 commit comments