From c06cf5d70a042407e3257227facaa6ae0ae7bef9 Mon Sep 17 00:00:00 2001 From: felinae98 <731499577@qq.com> Date: Tue, 27 Apr 2021 12:27:32 +0800 Subject: [PATCH] use auto import --- .../nonebot_hk_reporter/platform/__init__.py | 23 +++++++++---- .../nonebot_hk_reporter/platform/utils.py | 34 ------------------- src/plugins/nonebot_hk_reporter/scheduler.py | 23 ++++++++++++- 3 files changed, 38 insertions(+), 42 deletions(-) delete mode 100644 src/plugins/nonebot_hk_reporter/platform/utils.py diff --git a/src/plugins/nonebot_hk_reporter/platform/__init__.py b/src/plugins/nonebot_hk_reporter/platform/__init__.py index 4119479..d62cbb3 100644 --- a/src/plugins/nonebot_hk_reporter/platform/__init__.py +++ b/src/plugins/nonebot_hk_reporter/platform/__init__.py @@ -1,8 +1,17 @@ -from .bilibili import Bilibili -from .rss import Rss -from .weibo import Weibo -from .wechat import Wechat -from .utils import check_sub_target, fetch_and_send -from .platform import PlatformNoTarget -from .utils import platform_manager +from .platform import PlatformProto +from pkgutil import iter_modules +from pathlib import Path +from importlib import import_module +_package_dir = str(Path(__file__).resolve().parent) +for (_, module_name, _) in iter_modules([_package_dir]): + import_module(f'{__name__}.{module_name}') + + +async def check_sub_target(target_type, target): + return await platform_manager[target_type].get_account_name(target) + +platform_manager: dict[str, PlatformProto] = { + obj.platform_name: obj() for obj in \ + filter(lambda platform: platform.enabled, PlatformProto.registory) + } diff --git a/src/plugins/nonebot_hk_reporter/platform/utils.py b/src/plugins/nonebot_hk_reporter/platform/utils.py deleted file mode 100644 index aa28397..0000000 --- a/src/plugins/nonebot_hk_reporter/platform/utils.py +++ /dev/null @@ -1,34 +0,0 @@ -import nonebot -from nonebot import logger -from collections import defaultdict -from typing import Type -from .platform import PlatformProto -from ..config import Config -from ..post import Post -from ..send import send_msgs - -async def check_sub_target(target_type, target): - return await platform_manager[target_type].get_account_name(target) - -platform_manager: dict[str, PlatformProto] = { - obj.platform_name: obj() for obj in \ - filter(lambda platform: platform.enabled, PlatformProto.registory) - } - -async def fetch_and_send(target_type: str): - config = Config() - target = config.get_next_target(target_type) - if not target: - return - logger.debug('try to fecth new posts from {}, target: {}'.format(target_type, target)) - send_list = config.target_user_cache[target_type][target] - bot_list = list(nonebot.get_bots().values()) - bot = bot_list[0] if bot_list else None - to_send = await platform_manager[target_type].fetch_new_post(target, send_list) - for user, send_list in to_send: - for send_post in send_list: - logger.info('send to {}: {}'.format(user, send_post)) - if not bot: - logger.warning('no bot connected') - else: - send_msgs(bot, user.user, user.user_type, await send_post.generate_messages()) diff --git a/src/plugins/nonebot_hk_reporter/scheduler.py b/src/plugins/nonebot_hk_reporter/scheduler.py index 6383792..d61b3c3 100644 --- a/src/plugins/nonebot_hk_reporter/scheduler.py +++ b/src/plugins/nonebot_hk_reporter/scheduler.py @@ -1,6 +1,9 @@ +import nonebot from nonebot import get_driver, logger from .send import do_send_msgs -from .platform import fetch_and_send, platform_manager +from .platform import platform_manager +from .config import Config +from .send import send_msgs from apscheduler.schedulers.asyncio import AsyncIOScheduler scheduler = AsyncIOScheduler() @@ -11,6 +14,24 @@ async def _start(): get_driver().on_startup(_start) +async def fetch_and_send(target_type: str): + config = Config() + target = config.get_next_target(target_type) + if not target: + return + logger.debug('try to fecth new posts from {}, target: {}'.format(target_type, target)) + send_list = config.target_user_cache[target_type][target] + bot_list = list(nonebot.get_bots().values()) + bot = bot_list[0] if bot_list else None + to_send = await platform_manager[target_type].fetch_new_post(target, send_list) + for user, send_list in to_send: + for send_post in send_list: + logger.info('send to {}: {}'.format(user, send_post)) + if not bot: + logger.warning('no bot connected') + else: + send_msgs(bot, user.user, user.user_type, await send_post.generate_messages()) + for platform_name, platform in platform_manager.items(): if isinstance(platform.schedule_interval, int): logger.info(f'start scheduler for {platform_name} with interval {platform.schedule_interval}')