From 5ec4baf089d908fa13be0bbb51ab7aa52da198b0 Mon Sep 17 00:00:00 2001 From: Hanako <2698964243@qq.com> Date: Mon, 7 Jul 2025 23:37:31 +0800 Subject: [PATCH] =?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 | 7 +++- .../web_ui/api/tabs/main/data_source.py | 6 ++- zhenxun/utils/platform.py | 37 ++++++++++++++++--- 3 files changed, 42 insertions(+), 8 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..a387a731 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 @@ -62,7 +62,12 @@ class ApiDataSource: ) else: nickname = bot.self_id - ava_url = "" + ava_url = ( + 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/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: