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: