From 568000af70e739ad0ca653bd9547cf9edb9d3df9 Mon Sep 17 00:00:00 2001 From: felinae98 <731499577@qq.com> Date: Fri, 1 Oct 2021 16:56:44 +0800 Subject: [PATCH] add use queue, default disable it --- .../nonebot_hk_reporter/config_manager.py | 2 -- .../nonebot_hk_reporter/plugin_config.py | 1 + src/plugins/nonebot_hk_reporter/scheduler.py | 24 +++++++++-------- src/plugins/nonebot_hk_reporter/send.py | 26 +++++++++++++------ 4 files changed, 32 insertions(+), 21 deletions(-) diff --git a/src/plugins/nonebot_hk_reporter/config_manager.py b/src/plugins/nonebot_hk_reporter/config_manager.py index 5d9c43d..3632e2d 100644 --- a/src/plugins/nonebot_hk_reporter/config_manager.py +++ b/src/plugins/nonebot_hk_reporter/config_manager.py @@ -10,7 +10,6 @@ from nonebot.matcher import Matcher from .config import Config, NoSuchSubscribeException from .platform import platform_manager, check_sub_target -from .send import send_msgs from .utils import parse_text from .types import Target @@ -118,7 +117,6 @@ def do_query_sub(query_sub: Type[Matcher]): if platform.enable_tag: res += ' {}'.format(', '.join(sub['tags'])) res += '\n' - # send_msgs(bot, event.group_id, 'group', [await parse_text(res)]) await query_sub.finish(Message(await parse_text(res))) def do_del_sub(del_sub: Type[Matcher]): diff --git a/src/plugins/nonebot_hk_reporter/plugin_config.py b/src/plugins/nonebot_hk_reporter/plugin_config.py index 03a5bdb..6bbe5a9 100644 --- a/src/plugins/nonebot_hk_reporter/plugin_config.py +++ b/src/plugins/nonebot_hk_reporter/plugin_config.py @@ -10,6 +10,7 @@ class PlugConfig(BaseSettings): hk_reporter_use_local: bool = False hk_reporter_browser: str = '' hk_reporter_init_filter: bool = True + hk_reporter_use_queue: bool = False class Config: extra = 'ignore' diff --git a/src/plugins/nonebot_hk_reporter/scheduler.py b/src/plugins/nonebot_hk_reporter/scheduler.py index 8b4b6fd..72a8a84 100644 --- a/src/plugins/nonebot_hk_reporter/scheduler.py +++ b/src/plugins/nonebot_hk_reporter/scheduler.py @@ -11,6 +11,7 @@ from .platform import platform_manager from .send import do_send_msgs from .send import send_msgs from .types import UserSubInfo +from .plugin_config import plugin_config scheduler = AsyncIOScheduler() @@ -43,7 +44,7 @@ async def fetch_and_send(target_type: str): if not bot: logger.warning('no bot connected') else: - send_msgs(bot, user.user, user.user_type, await send_post.generate_messages()) + await send_msgs(bot, user.user, user.user_type, await send_post.generate_messages()) for platform_name, platform in platform_manager.items(): if platform.schedule_type in ['cron', 'interval', 'date']: @@ -52,16 +53,17 @@ for platform_name, platform in platform_manager.items(): fetch_and_send, platform.schedule_type, **platform.schedule_kw, args=(platform_name,)) -scheduler.add_job(do_send_msgs, 'interval', seconds=0.3, coalesce=True) +if plugin_config.hk_reporter_use_queue: + scheduler.add_job(do_send_msgs, 'interval', seconds=0.3, coalesce=True) -class SchedulerLogFilter(logging.Filter): + class SchedulerLogFilter(logging.Filter): - def filter(self, record: logging.LogRecord) -> bool: - logger.debug("logRecord", record, record.getMessage()) - return not (record.name == "apscheduler" and 'skipped: maximum number of running instances reached' in record.getMessage()) + def filter(self, record: logging.LogRecord) -> bool: + logger.debug("logRecord", record, record.getMessage()) + return not (record.name == "apscheduler" and 'skipped: maximum number of running instances reached' in record.getMessage()) -aps_logger = logging.getLogger("apscheduler") -aps_logger.setLevel(30) -aps_logger.addFilter(SchedulerLogFilter()) -aps_logger.handlers.clear() -aps_logger.addHandler(LoguruHandler()) + aps_logger = logging.getLogger("apscheduler") + aps_logger.setLevel(30) + aps_logger.addFilter(SchedulerLogFilter()) + aps_logger.handlers.clear() + aps_logger.addHandler(LoguruHandler()) diff --git a/src/plugins/nonebot_hk_reporter/send.py b/src/plugins/nonebot_hk_reporter/send.py index 2dcc07b..04af0fd 100644 --- a/src/plugins/nonebot_hk_reporter/send.py +++ b/src/plugins/nonebot_hk_reporter/send.py @@ -1,9 +1,18 @@ -from nonebot import logger import time +from nonebot import logger +from nonebot.adapters.cqhttp.bot import Bot + +from .plugin_config import plugin_config + QUEUE = [] LAST_SEND_TIME = time.time() +async def _do_send(bot: 'Bot', user: str, user_type: str, msg): + if user_type == 'group': + await bot.call_api('send_group_msg', group_id=user, message=msg) + elif user_type == 'private': + await bot.call_api('send_private_msg', user_id=user, message=msg) async def do_send_msgs(): global LAST_SEND_TIME @@ -12,10 +21,7 @@ async def do_send_msgs(): if QUEUE: bot, user, user_type, msg, retry_time = QUEUE.pop(0) try: - if user_type == 'group': - await bot.call_api('send_group_msg', group_id=user, message=msg) - elif user_type == 'private': - await bot.call_api('send_private_msg', user_id=user, message=msg) + await _do_send(bot, user, user_type, msg) except: if retry_time > 0: QUEUE.insert(0, (bot, user, user_type, msg, retry_time - 1)) @@ -23,8 +29,12 @@ async def do_send_msgs(): logger.warning('send msg err {}'.format(msg)) LAST_SEND_TIME = time.time() -def send_msgs(bot, user, user_type, msgs): - for msg in msgs: - QUEUE.append((bot, user, user_type, msg, 2)) +async def send_msgs(bot, user, user_type, msgs): + if plugin_config.hk_reporter_use_queue: + for msg in msgs: + QUEUE.append((bot, user, user_type, msg, 2)) + else: + for msg in msgs: + await _do_send(bot, user, user_type, msg)