From ab4116a25394f8b7abafc31764ff154e3739695e Mon Sep 17 00:00:00 2001 From: Hanako <2698964243@qq.com> Date: Tue, 8 Jul 2025 02:11:32 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E2=9C=A8=20=E6=B7=BB=E5=8A=A0=E5=B9=B6?= =?UTF-8?q?=E4=BF=AE=E5=A4=8Dwebui=E5=AF=B9kook=E3=80=81discord=E7=9A=84?= =?UTF-8?q?=E5=A4=B4=E5=83=8F=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web_ui/api/tabs/dashboard/data_source.py | 11 ++++-- .../web_ui/api/tabs/main/data_source.py | 6 ++- zhenxun/configs/config.py | 4 ++ zhenxun/utils/platform.py | 37 ++++++++++++++++--- 4 files changed, 48 insertions(+), 10 deletions(-) diff --git a/zhenxun/builtin_plugins/web_ui/api/tabs/dashboard/data_source.py b/zhenxun/builtin_plugins/web_ui/api/tabs/dashboard/data_source.py index 87011c93..6b439ef3 100644 --- a/zhenxun/builtin_plugins/web_ui/api/tabs/dashboard/data_source.py +++ b/zhenxun/builtin_plugins/web_ui/api/tabs/dashboard/data_source.py @@ -54,15 +54,20 @@ class ApiDataSource: if platform == "qq": login_info = await bot.get_login_info() nickname = login_info["nickname"] - ava_url = ( - PlatformUtils.get_user_avatar_url( + ava_url: str = ( + await PlatformUtils.get_user_avatar_url( bot.self_id, "qq", BotConfig.get_qbot_uid(bot.self_id) ) or "" ) else: nickname = bot.self_id - ava_url = "" + ava_url: str = ( + await PlatformUtils.get_user_avatar_url( + bot.self_id, platform + ) + or "" + ) bot_info = BotInfo( self_id=bot.self_id, nickname=nickname, ava_url=ava_url, platform=platform ) diff --git a/zhenxun/builtin_plugins/web_ui/api/tabs/main/data_source.py b/zhenxun/builtin_plugins/web_ui/api/tabs/main/data_source.py index e87647dd..b459262b 100644 --- a/zhenxun/builtin_plugins/web_ui/api/tabs/main/data_source.py +++ b/zhenxun/builtin_plugins/web_ui/api/tabs/main/data_source.py @@ -76,11 +76,15 @@ class ApiDataSource: login_info = await bot.get_login_info() except Exception as e: logger.warning("调用接口get_login_info失败", "WebUi", e=e) + platform = PlatformUtils.get_platform(bot) or "" return TemplateBaseInfo( bot=bot, self_id=bot.self_id, nickname=login_info["nickname"] if login_info else bot.self_id, - ava_url=AVA_URL.format(bot.self_id), + ava_url=await PlatformUtils.get_user_avatar_url( + bot.self_id, platform + ) + or AVA_URL.format(bot.self_id), ) @classmethod diff --git a/zhenxun/configs/config.py b/zhenxun/configs/config.py index 83937201..d95df2cb 100644 --- a/zhenxun/configs/config.py +++ b/zhenxun/configs/config.py @@ -19,6 +19,10 @@ class BotSetting(BaseModel): """平台超级用户""" qbot_id_data: dict[str, str] = Field(default_factory=dict) """官bot id:账号id""" + kaiheila_bots: list[dict[str,str]] = Field(default_factory=list) + """kaiheilabot id:账号id""" + discord_bots: list[dict] = Field(default_factory=list) + """discordbot id:账号id""" def get_qbot_uid(self, qbot_id: str) -> str | None: """获取官bot账号id diff --git a/zhenxun/utils/platform.py b/zhenxun/utils/platform.py index 790aa230..47db7460 100644 --- a/zhenxun/utils/platform.py +++ b/zhenxun/utils/platform.py @@ -233,7 +233,7 @@ class PlatformUtils: return await AsyncHttpx.get_content(url) if url else None @classmethod - def get_user_avatar_url( + async def get_user_avatar_url( cls, user_id: str, platform: str, appid: str | None = None ) -> str | None: """快捷获取用户头像url @@ -242,12 +242,37 @@ class PlatformUtils: user_id: 用户id platform: 平台 """ - if platform != "qq": - return None - if user_id.isdigit(): - return f"http://q1.qlogo.cn/g?b=qq&nk={user_id}&s=160" + if platform == "qq": + if user_id.isdigit(): + return f"http://q1.qlogo.cn/g?b=qq&nk={user_id}&s=160" + else: + return f"https://q.qlogo.cn/qqapp/{appid}/{user_id}/640" + elif platform == "kaiheila": + if not hasattr(cls,'_kook_cache'): + params = { + 'user_id': user_id + } + header={ + 'Authorization': f"Bot {BotConfig.kaiheila_bots[0].get('token')}" + } + result=await AsyncHttpx.get(url='https://www.kookapp.cn/api/v3/user/view',params=params,headers=header) + cls._kook_cache = result.json()['data']['avatar'] + return cls._kook_cache + else: + return cls._kook_cache #使用临时缓存 + elif platform == "discord": + if not hasattr(cls,'_discord_cache'): + header={ + 'Authorization': f"Bot {BotConfig.discord_bots[0].get('token')}" + } + result=await AsyncHttpx.get(url=f'https://discord.com/api/users/{user_id}',headers=header) + cls._discord_cache = f"https://cdn.discordapp.com/avatars/{user_id}/{result.json()['avatar']}.png?size=256" + return cls._discord_cache + else: + return cls._discord_cache #使用临时缓存 + else: - return f"https://q.qlogo.cn/qqapp/{appid}/{user_id}/640" + return None @classmethod async def get_group_avatar(cls, gid: str, platform: str) -> bytes | None: From 4a7b1cec4d184a663a54a33784a5ca22113e6f02 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 7 Jul 2025 18:13:02 +0000 Subject: [PATCH 2/2] :rotating_light: auto fix by pre-commit hooks --- .../web_ui/api/tabs/dashboard/data_source.py | 5 +-- .../web_ui/api/tabs/main/data_source.py | 6 ++-- zhenxun/configs/config.py | 2 +- zhenxun/utils/platform.py | 32 +++++++++++-------- 4 files changed, 22 insertions(+), 23 deletions(-) diff --git a/zhenxun/builtin_plugins/web_ui/api/tabs/dashboard/data_source.py b/zhenxun/builtin_plugins/web_ui/api/tabs/dashboard/data_source.py index 6b439ef3..58ef2a8d 100644 --- a/zhenxun/builtin_plugins/web_ui/api/tabs/dashboard/data_source.py +++ b/zhenxun/builtin_plugins/web_ui/api/tabs/dashboard/data_source.py @@ -63,10 +63,7 @@ class ApiDataSource: else: nickname = bot.self_id ava_url: str = ( - await PlatformUtils.get_user_avatar_url( - bot.self_id, platform - ) - or "" + await PlatformUtils.get_user_avatar_url(bot.self_id, platform) or "" ) bot_info = BotInfo( self_id=bot.self_id, nickname=nickname, ava_url=ava_url, platform=platform diff --git a/zhenxun/builtin_plugins/web_ui/api/tabs/main/data_source.py b/zhenxun/builtin_plugins/web_ui/api/tabs/main/data_source.py index b459262b..fa84f166 100644 --- a/zhenxun/builtin_plugins/web_ui/api/tabs/main/data_source.py +++ b/zhenxun/builtin_plugins/web_ui/api/tabs/main/data_source.py @@ -81,10 +81,8 @@ class ApiDataSource: bot=bot, self_id=bot.self_id, nickname=login_info["nickname"] if login_info else bot.self_id, - ava_url=await PlatformUtils.get_user_avatar_url( - bot.self_id, platform - ) - or AVA_URL.format(bot.self_id), + ava_url=await PlatformUtils.get_user_avatar_url(bot.self_id, platform) + or AVA_URL.format(bot.self_id), ) @classmethod diff --git a/zhenxun/configs/config.py b/zhenxun/configs/config.py index d95df2cb..4ba35324 100644 --- a/zhenxun/configs/config.py +++ b/zhenxun/configs/config.py @@ -19,7 +19,7 @@ class BotSetting(BaseModel): """平台超级用户""" qbot_id_data: dict[str, str] = Field(default_factory=dict) """官bot id:账号id""" - kaiheila_bots: list[dict[str,str]] = Field(default_factory=list) + kaiheila_bots: list[dict[str, str]] = Field(default_factory=list) """kaiheilabot id:账号id""" discord_bots: list[dict] = Field(default_factory=list) """discordbot id:账号id""" diff --git a/zhenxun/utils/platform.py b/zhenxun/utils/platform.py index 47db7460..ee321205 100644 --- a/zhenxun/utils/platform.py +++ b/zhenxun/utils/platform.py @@ -248,28 +248,32 @@ class PlatformUtils: else: return f"https://q.qlogo.cn/qqapp/{appid}/{user_id}/640" elif platform == "kaiheila": - if not hasattr(cls,'_kook_cache'): - params = { - 'user_id': user_id + if not hasattr(cls, "_kook_cache"): + params = {"user_id": user_id} + header = { + "Authorization": f"Bot {BotConfig.kaiheila_bots[0].get('token')}" } - header={ - 'Authorization': f"Bot {BotConfig.kaiheila_bots[0].get('token')}" - } - result=await AsyncHttpx.get(url='https://www.kookapp.cn/api/v3/user/view',params=params,headers=header) - cls._kook_cache = result.json()['data']['avatar'] + result = await AsyncHttpx.get( + url="https://www.kookapp.cn/api/v3/user/view", + params=params, + headers=header, + ) + cls._kook_cache = result.json()["data"]["avatar"] return cls._kook_cache else: - return cls._kook_cache #使用临时缓存 + return cls._kook_cache # 使用临时缓存 elif platform == "discord": - if not hasattr(cls,'_discord_cache'): - header={ - 'Authorization': f"Bot {BotConfig.discord_bots[0].get('token')}" + if not hasattr(cls, "_discord_cache"): + header = { + "Authorization": f"Bot {BotConfig.discord_bots[0].get('token')}" } - result=await AsyncHttpx.get(url=f'https://discord.com/api/users/{user_id}',headers=header) + result = await AsyncHttpx.get( + url=f"https://discord.com/api/users/{user_id}", headers=header + ) cls._discord_cache = f"https://cdn.discordapp.com/avatars/{user_id}/{result.json()['avatar']}.png?size=256" return cls._discord_cache else: - return cls._discord_cache #使用临时缓存 + return cls._discord_cache # 使用临时缓存 else: return None