diff --git a/zhenxun/builtin_plugins/scheduler/auto_update_group.py b/zhenxun/builtin_plugins/scheduler/auto_update_group.py index 1cfdacb3..f399248c 100644 --- a/zhenxun/builtin_plugins/scheduler/auto_update_group.py +++ b/zhenxun/builtin_plugins/scheduler/auto_update_group.py @@ -4,8 +4,7 @@ from nonebot_plugin_apscheduler import scheduler from zhenxun.models.friend_user import FriendUser from zhenxun.models.group_console import GroupConsole from zhenxun.services.log import logger - -# TODO: 其他平台更新 +from zhenxun.utils.platform import PlatformManage # 自动更新群组信息 @@ -19,21 +18,7 @@ async def _(): _used_group = [] for bot in bots.values(): try: - group_list = await bot.get_group_list() - gl = [g["group_id"] for g in group_list if g["group_id"] not in _used_group] - for g in gl: - _used_group.append(g) - group_info = await bot.get_group_info(group_id=g) - await GroupConsole.update_or_create( - group_id=str(group_info["group_id"]), - defaults={ - "group_name": group_info["group_name"], - "max_member_count": group_info["max_member_count"], - "member_count": group_info["member_count"], - "group_flag": 1, - }, - ) - logger.debug("自动更新群组信息成功", "自动更新群组", group_id=g) + await PlatformManage.update_group(bot) except Exception as e: logger.error(f"Bot: {bot.self_id} 自动更新群组信息", e=e) logger.info("自动更新群组成员信息成功...") @@ -47,22 +32,9 @@ async def _(): ) async def _(): bots = nonebot.get_bots() - for key in bots: + for bot in bots.values(): try: - bot = bots[key] - fl = await bot.get_friend_list() - for f in fl: - if FriendUser.exists(user_id=str(f["user_id"])): - await FriendUser.create( - user_id=str(f["user_id"]), user_name=f["nickname"] - ) - logger.debug( - f"更新好友信息成功", "自动更新好友", session=f["user_id"] - ) - else: - logger.debug( - f"好友信息已存在", "自动更新好友", session=f["user_id"] - ) + await PlatformManage.update_friend(bot) except Exception as e: logger.error(f"自动更新好友信息错误", "自动更新好友", e=e) logger.info("自动更新好友信息成功...") diff --git a/zhenxun/builtin_plugins/superuser/update_fg_info/__init__.py b/zhenxun/builtin_plugins/superuser/update_fg_info.py similarity index 88% rename from zhenxun/builtin_plugins/superuser/update_fg_info/__init__.py rename to zhenxun/builtin_plugins/superuser/update_fg_info.py index 2c8bcca0..3c96a8e8 100644 --- a/zhenxun/builtin_plugins/superuser/update_fg_info/__init__.py +++ b/zhenxun/builtin_plugins/superuser/update_fg_info.py @@ -1,5 +1,4 @@ from nonebot.adapters import Bot -from nonebot.adapters.kaiheila.exception import ApiNotAvailable from nonebot.permission import SUPERUSER from nonebot.plugin import PluginMetadata from nonebot.rule import to_me @@ -8,11 +7,9 @@ from nonebot_plugin_saa import Text from nonebot_plugin_session import EventSession from zhenxun.configs.utils import PluginExtraData -from zhenxun.models.friend_user import FriendUser from zhenxun.services.log import logger from zhenxun.utils.enum import PluginType - -from ._data_source import FgUpdateManage +from zhenxun.utils.platform import PlatformManage __plugin_meta__ = PluginMetadata( name="更新群组/好友信息", @@ -57,7 +54,7 @@ async def _( arparma: Arparma, ): try: - num = await FgUpdateManage.update_group(bot, session.platform) + num = await PlatformManage.update_group(bot) logger.info( f"更新群聊信息完成,共更新了 {num} 个群组的信息!", arparma.header_result, @@ -78,7 +75,7 @@ async def _( arparma: Arparma, ): try: - num = await FgUpdateManage.update_friend(bot, session.platform) + num = await PlatformManage.update_friend(bot, session.platform) logger.info( f"更新好友信息完成,共更新了 {num} 个好友的信息!", arparma.header_result, diff --git a/zhenxun/builtin_plugins/superuser/update_fg_info/_data_source.py b/zhenxun/utils/platform.py similarity index 77% rename from zhenxun/builtin_plugins/superuser/update_fg_info/_data_source.py rename to zhenxun/utils/platform.py index 646a1136..fc18a5f6 100644 --- a/zhenxun/builtin_plugins/superuser/update_fg_info/_data_source.py +++ b/zhenxun/utils/platform.py @@ -10,21 +10,21 @@ from zhenxun.models.group_console import GroupConsole from zhenxun.services.log import logger -class FgUpdateManage: +class PlatformManage: @classmethod - async def update_group(cls, bot: Bot, platform: str) -> int: + async def update_group(cls, bot: Bot) -> int: """更新群组信息 参数: bot: Bot - platform: 平台 返回: int: 更新个数 """ create_list = [] - if group_list := await cls.__get_group_list(bot): + group_list, platform = await cls.__get_group_list(bot) + if group_list: exists_group_list = await GroupConsole.all().values_list( "group_id", "channel_id" ) @@ -42,7 +42,7 @@ class FgUpdateManage: return len(create_list) @classmethod - async def __get_group_list(cls, bot: Bot) -> list[GroupConsole]: + async def __get_group_list(cls, bot: Bot) -> tuple[list[GroupConsole], str]: """获取群组列表 参数: @@ -61,7 +61,7 @@ class FgUpdateManage: member_count=g["member_count"], ) for g in group_list - ] + ], "qq" if isinstance(bot, v12Bot): group_list = await bot.get_group_list() return [ @@ -70,7 +70,7 @@ class FgUpdateManage: user_name=g.group_name, # type: ignore ) for g in group_list - ] + ], "qq" if isinstance(bot, DodoBot): island_list = await bot.get_island_list() source_id_list = [ @@ -88,28 +88,41 @@ class FgUpdateManage: ) for c in channel_list ] - return group_list + return group_list, "dodo" if isinstance(bot, KaiheilaBot): - # TODO: kaiheila群组列表 - pass + group_list = [] + guilds = await bot.guild_list() + if guilds.guilds: + for guild_id, name in [(g.id_, g.name) for g in guilds.guilds if g.id_]: + view = await bot.guild_view(guild_id=guild_id) + group_list.append(GroupConsole(group_id=guild_id, group_name=name)) + if view.channels: + group_list += [ + GroupConsole( + group_id=guild_id, group_name=c.name, channel_id=c.id_ + ) + for c in view.channels + if c.type != 0 + ] + return group_list, "kaiheila" if isinstance(bot, DiscordBot): # TODO: discord群组列表 pass - return [] + return [], "" @classmethod - async def update_friend(cls, bot: Bot, platform: str) -> int: + async def update_friend(cls, bot: Bot) -> int: """更新好友信息 参数: bot: Bot - platform: 平台 返回: int: 更新个数 """ create_list = [] - if friend_list := await cls.__get_friend_list(bot): + friend_list, platform = await cls.__get_friend_list(bot) + if friend_list: user_id_list = await FriendUser.all().values_list("user_id", flat=True) for friend in friend_list: friend.platform = platform @@ -120,7 +133,7 @@ class FgUpdateManage: return len(create_list) @classmethod - async def __get_friend_list(cls, bot: Bot) -> list[FriendUser]: + async def __get_friend_list(cls, bot: Bot) -> tuple[list[FriendUser], str]: """获取好友列表 参数: @@ -134,7 +147,7 @@ class FgUpdateManage: return [ FriendUser(user_id=str(f["user_id"]), user_name=f["nickname"]) for f in friend_list - ] + ], "qq" if isinstance(bot, v12Bot): friend_list = await bot.get_friend_list() return [ @@ -143,7 +156,7 @@ class FgUpdateManage: user_name=f.user_displayname or f.user_remark or f.user_name, # type: ignore ) for f in friend_list - ] + ], "qq" if isinstance(bot, DodoBot): # TODO: dodo好友列表 pass @@ -153,4 +166,4 @@ class FgUpdateManage: if isinstance(bot, DiscordBot): # TODO: discord好友列表 pass - return [] + return [], ""